גירסה C++ Tutorial Nir Adar עמוד 1

Size: px
Start display at page:

Download "גירסה C++ Tutorial Nir Adar עמוד 1"

Transcription

1 גירסה C++ Tutorial מסמך זה הורד מהאתר. אין להפיץ מסמך זה במדיה כלשהי, ללא אישור מפורש מאת המחבר. מחבר המסמך איננו אחראי לכל נזק, ישיר או עקיף, שיגרם עקב השימוש במידע המופיע במסמך, וכן לנכונות התוכן של הנושאים המופיעים במסמך. עם זאת, המחבר עשה את מירב המאמצים כדי לספק את המידע המדויק והמלא ביותר. Nir Adar Home Page: כל הזכויות שמורות ל אנא שלחו תיקונים והערות אל המחבר. עמוד 1

2 עמוד 2

3 תוכן עניינים תוכן עניינים... 3 הקדמה... 4 הכרות ראשונה עם מחלקות... 5 הרשאות... 9 תרגיל קלט ופלט בשפת ++C פונקציות חופפות הקצאת זיכרון דינמית DEFAULT PARAMETERS משתני התייחסות הגדרת משתנים,...CONSTRUCTORS & DESTRUCTORS 21 הגדרת משתנים CONSTRUCTORS & DESTRUCTORS תחביר בסיסי ומוטיבציה מחלקות בעלות מספר בנאים, רשימות אתחול Default Constructor דוגמא מסכמת סיום עמוד 3

4 הקדמה במסמך זה נסקור את שפת ++C. מסמך זה מיועד לאנשים הבקיאים היטב בשפת C. המסמך אינו מתיימר להיות מדריך שלם לכל שפת ++C, אלא מיועד להעביר בצורה טובה את העקרונות והשיטות לגשת לתכנות ב++ C. מסמך זה הוא שדרוג של המסמך הישן שהיה בפרויקט,UnderWarrior והוא למעשה מצב ביניים של המטרה אליה אני שואף להגיע. בימים אלו אני משפר את המסמך על מנת שיהווה מדריך שלם לשפה. שינוי זה הולך לשנות את אופי המסמך, את סדר הנושאים בו, וכדו'. גירסה זו של המסמך היא הרחבה של המסמך המקורי שכתבתי, שעדיין שומרת על אופיו. לדעתי הזווית המצומצמת שמסמך זה מציג, גם לה יש מקום, ולכן אני משחרר מסמך זה כמסמך נפרד. אנשים רבים מתייחסים אל שפת ++C כהרחבה של שפת C. למעשה שפות אלו שונות ביותר אחת מהשניה. ++C היא שפה המציגה תפיסה חדשה ושונה לחלוטין מזו של שפת C. הסיבה להתייחסות לעתים לשפת ++C כהרחבה של C, היא הסיבה שכמעט כל תוכנה שנכתבה עבור C, תרוץ גם בשפת ++C. המקור הוא היסטורי מתכנני ++C רצו שיהיה ניתן להשתמש בקוד שכבר היה קיים בשפת C גם בשפה החדשה, ולכן תכננו אותה תואמת ככל הניתן לשפת C, בלי לפגוע בהגבלות וברעיונות של.C++ מדוע אם כך לא כל תוכנית בשפת C תרוץ בשפת ++C? הסיבה היא שבשפת ++C הוספו מילים שמורות (keywords) חדשות, שלמתכנת אסור להשתמש בהן בתור משתנים, כגון new, delete ועוד. תוכניות בשפת C בהן נעשה שימוש בשמות מזהים שב ++C הם מילים שמורות לא יעברו קומפילציה. במסמך זה נכיר את שפת ++C בעזרת מספר רב של דוגמאות. רוב הנושאים יוצגו בעזרת דוגמא, ולאחריה הסבר. הדגשנו במסמך את צורת החשיבה הדרושה לתכנות נכון ב ++C. במספר מקומות במסמך - ראשית אנו מציגים קטע קוד ב- C, מציגים בעייתיות הקיימת בו, ורואים כיצד הכלים השונים ב ++C פותרים את הבעיה הנדונה. עמוד 4

5 הכרות ראשונה עם מחלקות שפת ++C בנויה מסביב למחלקות.(class) מחלקה היא הרחבה של מושג המבנים (structs) הקיים בשפת C. מחלקה היא למעשה הגדרת טיפוס חדש בו מרוכזים פונקציות ומשתנים תחת שם אחד. לאחר שהגדרנו מחלקה, נוכל ליצור אובייקטים מסוג המחלקה שהגדרנו, ולהשתמש בהם בתוכניות שלנו. רעיון המחלקות הוא ניסיון לקרב את שפת התכנות למחשבה האנושית. אנו מגדירים עצמים ואוסף פעולות עליהם. למשל, נוכל להגדיר עצם מסוג בן אדם. נגדיר (בעזרת פונקציות) פעולות כגון הליכה, דיבור וכדומה. לאחר שהגדרנו אדם, נוכל להגדיר למשל גם זמר, שיקבל את כל התכונות של העצם אדם, ולהוסיף עליהן תכונות ופעולות נוספות, למשל, שירה. נראה במסמך זה כיצד אנו נעביר רעיונות כאלו ואחרים אל שפת התכנות. נתחיל בהכרת ++C, ונפתח בדוגמא: class MyClass int i; void func1(); int Start(); ; class Car int Drive(); ; class Horse int Drive(); ; MyClass a; Car Volvo; Horse Moshe; a.i = 3; a.func1(); Moshe.Drive(); Volvo.Drive(); עמוד 5

6 נביט בקטע מהדוגמא: class MyClass int i; void func1(); int Start(); ; התחלנו קטע זה בהגדרת מחלקה חדשה בשם.MyClass לאחר מכן, המילה השמורה public מגדירה את ההרשאות שיהיו למשתנים ולפונקציות שיופיעו אחריה. בנושא ההרשאות נעסוק מאוחר יותר. רק נציין שבדרך כלל לא נהוג להגדיר משתנים בשטח ה- public של המחלקה. כרגע כתבנו את המשתנה תחת ההרשאה public רק כדי לשמור על פשטות הדוגמא. לאחר מכן הגדרנו שהמחלקה MyClass מכילה משתנה בשם i מסוג,int ושתי פונקציות - func1() ו-() Start. נשים לב לנקודה הבאה: כאשר הגדרנו מחלקה, הגדרנו למעשה תבנית, ולא יצרנו משתנים. בדומה ל- struct בשפת C, כאשר מגדירים struct אנחנו לא מקצים זיכרון עבור המשתנים. הזיכרון יוקצה רק עבור כל משתנה שניצור מסוג ה- struct (ובמקרה שלנו עבור כל משתנה שניצור מסוג של המחלקה). צורת דיבור: כאשר, למשל, אנחנו כותבים את הקוד הבא: אנחנו אומרים שהגדרנו משתנה בשם i, שהסוג שלו הוא.int כאשר נגדיר משתנה שהוא מסוג מחלקה, נכנה את המשתנה בשם אובייקט. לדוגמא: בדוגמא זו יצרנו אובייקט בשם a שסוגו הוא המחלקה.MyClass int i; MyClass a; נזכור זאת להבא: כאשר מדברים על מחלקה, מדברים על התבנית שהגדרנו. כאשר מדברים על אובייקט, אנו מתייחסים לעותק של התבנית, הנמצא בזיכרון. class Car int Drive(); ; class Horse int Drive(); ; עמוד 6

7 בקטע קוד זה הגדרנו שתי מחלקות, אחת בשם Car והשניה בשם.Horse בכל אחת מהן קיימת פונקציה בשם.Drive() נשים לב שעבור כל מחלקה, יצרנו פונקציה Drive() שונה. בהצהרה זו הכרזנו על פונקציה Drive() ששייכת למחלקה Car ועל פונקציה.Horse ששייכת למחלקה Drive() MyClass a; Car Volvo; Horse Moshe; a.i = 3; a.func1(); Moshe.Drive(); Volvo.Drive(); כמו ב- C, הפונקציה ממנה מתחילה התוכנית לרוץ היא.main() עם תחילת התוכנית, אנו יוצרים אובייקט מסוג MyClass בשם a, אובייקט בשם.Moshe בשם Horse ואובייקט מסוג Car מסוג Volvo לאחר מכן, ניגשנו, בדומה לצורה בה אנו ניגשים לשדות ב- struct, אל השדה i הנמצא באובייקט a ושמנו בו את הערך 3. לאחר מכן קראנו לפונקציה func1() השייכת למחלקה MyClass על האובייקט a. כאשר השתמשנו פעמיים בפונקציה,Drive() פעם על Moshe ופעם על,Volvo קראנו לשתי פונקציות. בפעם הראשונה קראנו לפונקציה של המחלקה Horse ובפעם השניה קראנו לפונקציה של המחלקה.Car הערה: בדוגמא זו לא הצגנו כיצד ממשים את הפונקציות המוגדרות בתוך המחלקות, אלא רק כיצד מצהירים עליהן. נביט בדוגמא נוספת ונראה כיצד ניתן לממש פונקציות השייכות למחלקה. class Rectangle int x, y; int getarea() return x*y; ; class Circle int x, y, radius; int getarea(); ; עמוד 7

8 (אנו מניחים כי PI הוא קבוע שהוגדר במקום כלשהו בתוכנית). int Circle::getArea() return PI*radius*radius; ניתן לממש פונקציה בתוך הגדרת המחלקה, או לחילופין לממש אותה בקטע קוד נפרד מחוץ למחלקה. נביט במחלקה הראשונה בדוגמא: class Rectangle int x, y; int getarea() return x*y; ; הפונקציה getarea() ממומשת מיד אחרי ההצהרה עליה. היא מחזירה את המכפלה של x ב- y. נשים לב לדוגמא לשימוש בפונקציה: Rectangle rec1, rec2; int area1, area2;... area1 = rec1.getarea(); area2 = rec2.getarea(); בקריאה הראשונה הפונקציה פעלה על ה- x וה- y השייכים ל- rec1 ובקריאה השני היא פעלה על אלו השייכים ל- rec2. כעת נביט בצורה השניה למימוש פונקציות: class Circle int x, y, radius; int getarea(); ; int Circle::getArea() return PI*radius*radius; בדוגמא זו הצהרנו על הפונקציה getarea() בתוך המחלקה,Circle ומימשנו אותה מחוץ למחלקה. הכוונה בצורת הכתיבה הבאה: Circle::getArea() היא שאנו מממשים את הפונקציה getarea ששייכת למחלקה.Circle כבר ראינו שאותו שם לפונקציה יכול לשמש במחלקות שונות. לכן כשאנו באים לממש את הפונקציה מחוץ למחלקה, אנו צריכים להגיד במפורש לאיזו מחלקה פונקציה זו שייכת. עמוד 8

9 הרשאות כאשר עבדנו בשפת C, עבדנו לעיתים קרובות על ידי הגדרת ADTs Abstract -.Data Types הרעיון היה כזה: הגדרנו מבנה נתונים (struct) ואז הגדרנו פונקציות שפעלו עליו, והיו למעשה פעולות שמיועדות למבנה הנתונים שיצרנו. ב++ C למעשה הפכנו את מודל מבנה הנתונים המופשט לחלק מהשפה. כאשר אנו שמים למעשה את הפונקציות בהגדרת המחלקה אנחנו אומרים: הפונקציה X הנמצאת במחלקה Y, שייכת למחלקה Y, והיא תעבוד על אובייקטים הנמצאים במחלקה. יתכן ש- X תקבל פרמטרים ויתכן שלא, אולם תהיה לה גישה בכל מקרה לאובייקט עליו היא פועלת. למשל, בדוגמא הקודמת, כאשר כתבנו Moshe.Drive() הפעלנו את הפונקציה Drive() על האובייקט,Moshe מבלי להעביר את Moshe כפרמטר. בצורה זו ++C מחברת את רעיון ה- ADT לשפה. אחת הבעיות הגדולות שהיו עם,ADT היא שלמרות שהגדרנו פונקציות בהן המשתמש צריך להשתמש כדי לעבוד עם מבנה הנתונים שיצרנו, לא הייתה מניעה שהוא ייגש ישירות למשתנים וישנה אותם. במקרה כזה, יתכן שהאובייקט היה מגיע למצב לא תקף בעקבות שינויי המשתמש, והפונקציות שיועדו לפעול עליו היו נכשלות. בעיה נוספת, גדולה אף יותר, היא שבכך שהמשתמש ניגש ישירות לשדות של מבנה הנתונים, הוא נעשה תלוי במימוש של מבנה הנתונים. שינוי במימוש במקרה כזה ידרוש שינוי בקוד שהתבסס עליו. ++C באה לעזור לנו במקרה זה. מנגנון ההרשאות ב++ C בא למנוע מהמשתמש לגשת לחלק מהשדות של מבנה הנתונים, שלא בעזרת הפונקציות שמתכנת המחלקה בחר. ישנם 3 סוגי הרשאות ב++ C : private,public ו- protected. נציג כעת את שני הסוגים הראשונים, ובהרשאה מסוג protected ניתקל עוד בהמשך. class permissionclass int inumber1; private: int inumber2; ; permissionclass per; per.inumber1 = 10; per.inumber2 = 10; עמוד 9

10 הרשאה מסוג public היא ההרשאה שראינו עד כה. הרשאה זו אומרת: כל אחד יכול לגשת למשתנה או לפונקציה המוגדרת כ- public ולעשות בעזרתה ככל העולה על רוחו. לעומתה, הרשאה מסוג private אומרת: אל המשתנים או הפונקציות המוגדרים כ- private, יוכלו לגשת רק פונקציות השייכות לאותה מחלקה. בדרך כזו נוכל להפריד בין הממשק אל המשתמש לבין המימוש של המחלקה: הממשק יהיה בחלק ה- public של המחלקה, ופונקציות ומשתנים הקשורים למימוש יהיו ב- private. בדוגמא לעיל, ;10 = per.inumber1 היא שורה חוקית, כי inumber1 נמצא תחת ההרשאה public במחלקה. לעומתה, השורה ;10 = per.inumber2 איננה שורה חוקית, כי inumber2 איננו נמצא בחלק ה- public של המחלקה. שורה זו לא תעבור כלל קומפילציה. נביט בדוגמא נוספת, ונתחיל לראות כיצד משתמשים בהרשאות השונות. #include <iostream.h> class MyClass private: int j; int func1(int i); void print() cout << j << endl; ; int MyClass::func1(int i) j = i; return j; MyClass class1, class2; // The following line is illegal: class1.j = 10; class1.func1(10); class2.func1(20); class1.print(); class2.print(); הספרייה iostream.h היא המחליפה של הספרייה stdio.h משפת C, והיא מכילה מחלקות שונות לקלט ופלט. הפונקציה print הממומשת בתוך המחלקה MyClass משתמשת באובייקט cout על מנת לשלוח פלט למסך, ולכן היינו צריכים לעשות include לספריה זו. עמוד 10

11 השימוש באובייקט cout זוהי הדרך שלנו בשפת ++C לשלוח פלט למסך. C. של הוא המחליף ל' n \' endl ב- MyClass יצרנו משתנה עם הרשאה private בשם j. כמו כן יצרנו את הפונקציה print() שמדפיסה את ערכו, וכן יצרנו פונקציה בשם func1() שמקבלת מספר ומחליפה את ערכו של j במספר זה. התוכנית מדגימה כיצד אנו יוצרים שני אובייקטים מסוג.MyClass איננו יכולים להציב לתוך המשתנה j בתוך כל אחד מהם ערכים ישירות, (עקב ההרשאה שנתנו למשתנה זה), לכן אנו משתמשים בפונקציה func1() כדי לקבוע את ערכי j. בתחילה תהליך זה נראה מסורבל משהו, הרי בסופו של דבר בכל מקרה אנו משנים את המשתנה j, אז למה לעשות את זה דרך פונקציה ולא ישירות? יש לכך שתי סיבות חשובות: סיבה ראשונה, המוכרת למתכנתי C שעבדו עם,ADT היא הצורך להפריד בין הממשק של התוכנית למימוש שלה. הפונקציה func1() שייכת ל- public של הפונקציה, כלומר לממשק. אנו מניחים שכאשר קוראים לה היא משנה משתנה בתוך המחלקה, וכאשר קוראים ל-() print משתנה זה מודפס. אם המשתמש משתמש רק בפונקציות אלו ולא ניגש ישירות ל- j, נוכל למשל לשנות את שם המשתנה j, או לשנות פרטי אחרים הקשורים למימוש, ותוכניתו של המשתמש במחלקה לא תושפע. לעומת זאת אם המשתמש במחלקה ניגש ישירות לשדות שלה ואז נשנה את המחלקה, גם תוכניות המשתמש ידרשו שינוי. סיבה שניה, חשובה לא פחות להרשאות, היא ביקורת על המידע. נניח שנרצה לכתוב מחלקה שתתאר אדם. class Person private: char *name; int age; void SetAge(int newage); ; נרצה להיות מסוגלים לשנות את גילו של האדם. פתרון אפשרי יכול להיות הפונקציה הבאה: void Person::SetAge(int newage) age = newage; עמוד 11

12 אולם, נוכל גם להציע את הפתרון הבא: void Person::SetAge(int newage) if (newage > 0) age = newage; כאן אנו מתחילים לראות את היתרון שמשתנה private נתן לנו. פונקציה זו משנה את גילו של האדם רק אם הגיל החדש שרוצים לקבוע לו גדול מ- 0, כי הרי לא אפשרי שלאדם יהיה גיל שלילי. מכיוון שכל שינוי של המשתנה age צריך לעבור דרך הפונקציה,SetAge() אנו יכולים לבדוק ולהיות בטוחים שגילו של האדם הוא גיל תקף כל הזמן. נושא שיכול לבלבל בהתחלה הוא מתי ראוי להשתמש בכל אחת מההרשאות. האם המשתנה יכול להיות?private?public ומה לגבי פונקציות? מה לגבי ההרשאה הנוספת שאמרנו שקיימת,?protected הכלל הבא יסכם את הנושא: כלל אצבע לגבי הרשאות משתני המחלקה יוגדרו תמיד בתור.private פונקציות הנגישות למשתמש יוגדרו,public ופונקציות פנימיות ימוקמו לרוב כ- private. המשתמש אף פעם אינו צריך לגשת אל משתני המחלקה. אלו שייכים למימוש ולכן נמקם אותם כפרטיים. לכל משתנה שהוא,private במידה ונרצה לתת למשתמש גישה אליו, נגדיר פונקציה שתחזיר את ערכו למשתמש (get) ופונקציה שתאפשר למשתמש להזין ערך חדש עבור המשתנה.(set) תרגיל כתוב מחלקה בשם Point המייצגת נקודה במישור. לנקודה ערכי x ו- y שלמים אותם ניתן לקבל ולקבוע. כמו כן ניתן לקבל את מרחק הנקודה מהראשית. פתרון לתרגיל מוצג בעמוד הבא. עמוד 12

13 פתרון אפשרי לתרגיל: #include <math.h> class Point int GetX(); int GetY(); void SetX(int new_x) x = new_x; ; void SetY(int new_y) y = new_y; ; ; double Length(); private: int x, y; int Point::GetX() return x; int Point::GetY() return y; double Point::Length() return sqrt(x*x+y*y); יש לציין כי מימוש נכון ומלא של מחלקה זו הינו שונה מעט מהפתרון המוצג לעיל. הפתרון המוצע מתבסס על הידע אותו הצגנו עד כה במסמך. עמוד 13

14 קלט ופלט בשפת ++C נציג מספר דוגמאות נוספות לשימוש ב- cout, אוביקט המאפשר גישה אל הפלט של שפת ++C. נניח למשל שנרצה להדפיס שלושה מספרים אחד אחרי השני, נוכל לכתוב את הקוד הבא: על המסך יודפס: "456". אם נרצה להדפיס גם רווחים בין המספרים, נעשה זאת כך: או כך: int x = 4, y = 5, z = 6; cout << x << y << z; int x = 4, y = 5, z = 6; cout << x << " " << y << " " << z; int x = 4, y = 5, z = 6; cout << x << ' ' << y << ' ' << z; נסכם: האובייקט cout שולח פלט אל הפלט הסטנדרטי. ניתן לשרשר מספר איברים להדפסה, ולהדפיסם בשימוש אחד באובייקט,cout על ידי שימוש באופרטור >> בין איבר לאיבר. האובייקט cout מזהה את סוגי המשתנים שנשלחים אליו. אין צורך להעביר (כמו ב-() printf ב- C ) מהו הסוג של כל משתנה אותו רוצים להדפיס. שפת ++C מאפשרת לנו את התנהגותו של האופרטור >> כך שנוכל בעזרת cout להדפיס גם אובייקטים מסוג של מחלקות שאנו ניצור. קלט בשפת ++C מתבצע על ידי האובייקט,cin וצורת השימוש בו מזכירה קצת את השימוש ב- cout. הקוד הבא, לדוגמא, קולט מספר שלם מן המשתמש לתוך המשתנה i: int i; cin >> i; עמוד 14

15 פונקציות חופפות אחת מההרחבות של ++C לשפת C, היא הוספת פונקציות חופפות לשפה. בשפת ++C ניתן להגדיר פונקציות בעלות אותו שם, אך בעלות פרמטרים פורמליים שונים. פונקציות אלו נקראות פונקציות חופפות, והקומפיילר מתייחס אליהן כאל פונקציות נפרדות. לדוגמא: void func1(char c) cout << "Char: " << c << endl; void func1(char *sz) cout << "String: " << sz << endl; func1("hello"); func1('w'); String: Hello Char: W התוכנית תדפיס: בקריאה הראשונה לפונקציה העברנו לה מחרוזת, לכן נקראה הפונקציה המטפלת בסוג הנתונים *.char בפונקציה השניה העברנו תו, ולכן נקראה הפונקציה המקבלת.char יתכנו מקרים בהם הקומפיילר לא ידע לאיזה מהפונקציות החופפות לפנות. נביט למשל בדוגמא הבאה: void func1(float f); void func1(double d); int x = 10; func1(x); ל - התוכנית הנ"ל לא תעבור קומפילציה. כאשר מעבירים לפונקציה פרמטרים מסוג שונה מזה שהפונקציה מקבלת, מתבצעת המרה של הפרמטר הנשלח לזה שהפונקציה מצפה לקבל. אולם, במקרה לעיל הקומפיילר לא ידע להחליט לאיזה סוג משתנה להמיר את float- x או.double לפיכך, אם ננסה לקמפל את הקוד הנ"ל נקבל הודעת שגיאה שתודיע על כך. עמוד 15

16 הקצאת זיכרון דינמית אחת האפשרויות החשובות בכל שפת תכנות, היא האפשרות להקצות לתוכנית זיכרון נוסף בזמן ריצה. ב- C, השתמשנו בפונקציה malloc() על מנת להקצות זיכרון, ובפקודה free() על מנת לשחרר זיכרון זה. ב++ C, נשתמש במילים השמורות new ו- delete על מנת להקצות ולשחרר זיכרון. ה- syntax של :new ואם נרצה להקצות מערך של אלמנטים: <pointer> = new <requested type>; <pointer> = new <requested type>[number of items]; למשל, נניח שנרצה להקצות משתנה מסוג,int נכתוב: אם נרצה להקצות מחרוזת באורך 20, נכתוב: int *pi; pi = new int; char *szstring; szstring = new char[20]; זיכרון שהוקצה באופן דינמי, יש לשחרר במפורש, על ידי.delete ה- syntax של :delete ובמקרה שנרצה לשחרר מערך שהוקצה: delete <pointer>; delete []<pointer>; למשל, על מנת לשחרר את הזיכרון אותו הקצנו בדוגמא הקודמת בעזרת,new נכתוב: delete pi; delete []szstring; עמוד 16

17 Default parameters אחת האפשרויות החדשות, שלא היו קיימות בשפת C, ששפת ++C מספקת לנו, היא האפשרות לתת ערך ברירת מחדל לפרמטרים של פונקציות. אם פרמטר כלשהו של פונקציה בדרך כלל מקבל ערך קבוע, ורק לעיתים רחוקות נרצה לשים ערך במקומו, נוכל להשתמש במנגנון זה. נביט בדוגמא הבאה: #include <iostream.h> void func1(int i = 10) cout << i << endl; func1(23); func1(); פלט התוכנית יהיה: "23" ושורה לאחר מכן "10". הפונקציה func1 מקבלת פרמטרבשם i. ערך ברירת המחדל שלו נקבע להיות 10. כאשר אנו קוראים לפונקציה עם הערך 23, אנו מדפיסים את המספר 23 על המסך ומתעלמים לגמרי מערך ברירת המחדל. כאשר אנו קוראים לפונקציה שורה לאחר מכן ללא כל פרמטר, אזי הפונקציה משתמשת בערך ברירת המחדל של i ומדפיסה על המסך 10. כאשר פונקציה מקבלת מספר ערכים, אשר לחלקם ישנה ברירת מחדל ולחלקם אין ברירת מחדל, יופיעו המשתנים ללא ברירת המחדל ראשונים. לדוגמא, הפונקציה הבאה איננה כתובה בצורה חוקית: הפונקציה הבאה הינה חוקית: void PrintNumbers(int i2 = 10, int i3 = 20, int i1) cout << i1 << " " << i2 << " " << i3 << endl; void PrintNumbers(int i1, int i2 = 10, int i3 = 20) cout << i1 << " " << i2 << " " << i3 << endl; עמוד 17

18 נביט בפונקצית ה-() main הבאה המשתמשת בפונקציה :PrintNumbers PrintNumbers(10); PrintNumbers(10, 20); PrintNumbers(10, 20, 30); PrintNumbers(); כל השורות, מלבד השורה המודגשת באדום, יעברו קומפילציה. השורה המודגשת לא תעבור קומפילציה, מכיוון שלא הגדרנו ערך ברירת מחדל ל- i1, ולכן אי אפשר לקרוא לפונקציה ללא העברת ערך אליו. פלט התוכנית ללא השורה הבעייתית: גם לפונקציות של מחלקה ניתן להגדיר ערכי ברירת מחדל. נראה זאת בהמשך המסמך עמוד 18

19 משתני התייחסות אלמנט שפה חדש נוסף בשפת ++C הוא משתני התייחסות.references ניתן לחלק את אלמנטי המידע בשפת C לשתי קטגוריות: משתנים ומצביעים. משתנה הכיל מידע, ומצביע הינו משתנה שמכיל כתובת בזכרון, בה נמצא משתנה אחר. נביט איך זה נראה בזכרון. נניח כי הגדרנו משתנה i מסוג מספר שלם. ל- i הוקצאו מספר תאים בזכרון (לצורך פשטות נניח כי הוקצה תא אחד). נניח, למשל, של- i הוקצאה הכתובת 1000 בזכרון. int i = 5; כעת נגדיר מצביע p, שיצביע אל i. מצביע הוא משתנה בעצמו, ולכן יש לו כתובת. נניח כי p קיבל את הכתובת p יצביע אל i, ולכן p יכיל את הערך int *p = &i; ++C מציגה צורת עבודה נוספת - משתני התייחסות. משתנה התייחסות הינו שם נוסף למשתנה קיים. לא יוקצה זכרון נוסף עבור משתנה ההתייחסות. שינוי של משתנה ההתייחסות ישנה את המשתנה המקורי. מבחינת תחביר, משתנה התייחסות יוגדר כך: לדוגמא: <type>& <reference_name> = var_name; int &j = i; שינוי של j יגרום לשינוי של i, ולהפך. נביט כעת בדוגמא פשוטה לשימוש במשתני התייחסות: עמוד 19

20 #include <iostream.h> int i = 5; int &j = i; j = 7; cout << i << endl; פלט התוכנית יהיה 7. משתני התייחסות יכולים להיות פרמטרים של פונקציות, וכן ערכים מוחזרים של פונקציות. יתרונות השימוש במשתני התייחסות: 1. נוחות שימוש: השימוש בהם הינו כמו במשתנה לוקלי, ולא צריך להסתבך עם התחביר של מצביעים. 2. יעילות: לא נוצר העתק של המשתנה המועבר אל הפונקציה (פעולה שיכולה להיות יקרה), אלא ממש המשתנה מועבר. נשים לב כי לאחר שהגדרנו את j להתייחס אל i, לא ניתן לגרום לו להתייחס למשתנה אחר. שינוי של j ישנה את הערך שהוא מתייחס אליו. כלומר: הקביעה לאן מתייחס ה- reference נקבעת עם אתחולו. משתנה התייחסות הינו שם נוסף למשתנה קיים. לא מוקצה עבורו עוד זכרון. #include <iostream.h> int i = 5; int &j = i; cout << &i << endl << &j << endl; פלט התוכנית יכול להיות, למשל: 0x0012FF7C 0x0012FF7C עמוד 20

21 הגדרת משתנים, Constructors & Destructors ADT הינה אחת מדרכי התכנות השימושיות ביותר בשפת C. עם זאת, כבר ציינו שבשפת C היו בגישה זו מספר בעיות. נציג כעת בעיה נוספת, ונראה כיצד ++C פותרת אותה. כפי שכבר צוין, הרעיון שמאחורי ADT הוא הגדרת מבנה נתונים (struct) ופעולות (פונקציות) שפועלות עליו. דוגמא ל- ADT בשפת C היא מנגנון העבודה עם קבצים בשפת C. הגדרנו struct בשם.FILE כאשר היינו רוצים לגשת לקובץ, היינו ראשית מצהירים על מצביע מסוג.FILE לאחר מכן, היינו משתמשים בפעולה fopen על מנת לפתוח את הקובץ. היינו מבצעים פעולות קלט פלט שונות, ובסיום העבודה היינו סוגרים את הקובץ עם הפקודה.fclose באופן דומה, לכל ADT בשפת C, יצרנו פונקציות "Create" ו-" Destroy " ששימשו לאתחול והריסת מבנה הנתונים. תהליך זה, של יצירת מצביע, איתחולו בעזרת פונקציה ומחיקתו בסיום על ידי פונקציה אחרת אינו בטוח. נביט בדוגמא הבאה כדי לראות למה: נניח שנתונה התוכנית הבאה: #include <stdio.h> FILE *fin; char szfilename[20]; printf("enter file name: "); scanf("%s", szfilename); fin = fopen(szfilename, "r");... fclose(fin); למתכנתי C, תוכנית זו נראית תקינה, אולם היא מכילה מצב שב++ C אנו מנסים להימנע ממנו: אנו מגדירים את המצביע fin כבר בשורה הראשונה של הפונקציה, אולם אנו שמים בו ערך משמעותי רק עמוק בתוך הפונקציה. הבעייתיות במצב זה שאם יוסף קוד בין הרגע שהצהרנו על fin עד לרגע שאתחלנו את המשתנה, אזי נקבל זבל. נרצה למנוע את קיומם של משתנים או אובייקטים לא מאותחלים. הגישה של ++C: בתוכנית ++C הבנויה כראוי, בכל רגע נתון כל המשתנים מכילים ערכים תקפים (ערכים אלו יכולים להיות גם NULL או ערך שיאמר שאין במשתנה מידע משמעותי, אולם לא יהיו משתנים שיכילו זבל). האמצעים לעמוד בדרישה זו: הגדרת משתנים בכל מקום בפונקציה. ו- Destructors. Constructors עמוד 21

22 הגדרת משתנים בשפת ++C, אנו יכולים להגדיר משתנים בכל קטע של הפונקציה, ולא רק בראש בלוק. אי לכך, נוכל להגדיר על המשתנה, מיד לפני שנרצה להשתמש בו, ולאו דווקא בראש הפונקציה. למשל, התוכנית הבאה היא תוכנית חוקית לגמרי ב++ C, אולם לא ב- C : printf("please enter 2 numbers: "); int x, y; scanf("%d%d", &x, &y); int sum = x+y; printf("the sum of x+y is %d\n", sum); למרות שזו תוכנית חוקית ב++ C, נזכור כי אמרנו שב++ C נשתמש בפונקציות הקלט והפלט של ++C, ולא באלו של שפת C, ולכן הדרך הנכונה לכתוב את התוכנית הינה: cout << "Please enter 2 numbers: "; int x, y; cin >> x >> y; int sum = x+y; cout << "The sum of x+y is " << sum << endl; על ידי כך שאנו מגדירים את המשתנים קרוב ככל הניתן למקום בו אנו משתמשים בהם, התקדמנו צעד לעבר המצב הרצוי לנו - המשתנים מצויים כעת זמן מינימלי במצב לא מאותחל. אנו מגדירים אותם רגע לפני שאנו ממלאים בהם תוכן, ולכן הסיכוי שנשתמש במשתנה בו יש זבל קטן, אם זאת, עדיין לא הגענו למצב שבכלל אין משתנים המכילים זבל. נביט כעת כיצד אנו פותרים בעיה זו. Constructors & Destructors תחביר בסיסי ומוטיבציה לכל מחלקה, ישנן מספר פונקציות מיוחדת - הבנאים (Constructors).(Destructor) וההורסים מבחינת תחביר, הבנאי הוא פונקציה ששמה כשם המחלקה. הבנאי יכול לקבל פרמטרים כלשהם כרצוננו. ההורס הוא פונקציה ששמה מתחיל ב~ (גל), ולאחריו שם המחלקה. ההורס אינו מקבל לעולם פרמטרים. עמוד 22

23 למשל, נביט במחלקה הבאה. שם המחלקה הוא,MyClass ויש לה בנאי והורס, ששניהם אינם מקבלים פרמטרים: class MyClass MyClass(); ~MyClass(); ; הבנאי וההורס נמצאים לרוב בחלק ה- public של המחלקה. ניתן לשים אותם גם תחת הרשאה אחרת, אולם הרווחים מפעולה כזו הם מחוץ להיקפו של מסמך זה. אנו נניח כי תמיד הבנאי וההורס נמצאים תחת הרשאה.public הבנאי היא פונקציה הנקראת ברגע שאובייקט מסוג המחלקה נוצר. מטרת פונקציה זו היא לאתחל את שדות האובייקט בערכים התחלתיים, ולבצע פעולות אתחול נוספות אם יש צורך בכך. למשל, נביט בקטע הקוד הבא: class Rectangle private: int x, y; Rectangle(); Rectangle::Rectangle() x = y = 4; cout << "Rectangle Ctor" << endl; Rectangle x1; cout << "Main Program" << endl; Rectangle x2; יצרנו מחלקה בשם Rectangle (מלבן). הגדרנו במחלקה זו את השדות x ו- y, שהם שדות פרטיים של המחלקה. הבנאי של המחלקה מאתחל את x,y ושם בהם את הערך 4. כאשר נריץ את התוכנית, על המסך יודפס: Rectangle Ctor Main Program Rectangle Ctor מיד כאשר הצהרנו על אובייקט של המחלקה, נקרא הבנאי על מנת לאתחל את השדות שלו. עמוד 23

24 ההורס של המחלקה נקרא רגע לפני שהזיכרון שהוקצה עבור אובייקט כלשהו משתחרר. אם נרצה לעשות פעולות שונות לפני שחרור הזיכרון של האובייקט, נבצע אותן כאן. למשל, נניח שאחת מהפונקציות של המחלקה הקצתה זיכרון דינמי במהלך ריצת התוכנית, ונרצה לשחרר זיכרון זה, לפני שנשחרר את זיכרון המחלקה. ניקח כעת את הגדרת המחלקה Rectangle ונוסיף לה :Destructor class Rectangle private: int x, y; Rectangle(); ~Rectangle(); Rectangle::Rectangle() x = y = 4; cout << "Rectangle Ctor" << endl; Rectangle::~Rectangle() cout << "Rectangle Dtor" << endl; נביט כעת במספר תוכנית, שיתייחסו כולן למימוש זה של :Rectangle ראשית נביט באותה דוגמא שראינו קודם, טרם הוספנו את ההורס ל- Rectangle. Rectangle x1; cout << "Main Program" << endl; Rectangle x2; Rectangle Ctor Main Program Rectangle Ctor Rectangle Dtor Rectangle Dtor כעת תוכנית זו תדפיס: שלושת השורות הראשונות הן אותן שלושת השורות שהיו בדוגמא הקודמת. בסוף הפונקציה,main() משוחררים כל המשתנים המקומיים שהוקצו בה. מכיוון ש- x2,x1 הינם משתנים מקומיים, הם משוחררים, ורגע לפני שהם משוחררים נקרא ההורס שלהם. עמוד 24

25 נביט בדוגמא שניה: Rectangle x1, *x2; cout << "Stage 1" << endl; x2 = new Rectangle; x1 = *x2; delete x2; cout << "Final stage" << endl; על המסך יודפס: Rectangle Ctor Stage 1 Rectangle Ctor Rectangle Dtor Final stage Rectangle Dtor כאשר הגדרנו את x1 ואת x2, נקרא הבנאי רק פעם אחת, רק עבור x1. x1 הוא אובייקט מסוג,Rectangle ולכן אתחלנו אותו. x2 הוא מצביע, והוא איננו אובייקט של המחלקה (הוא רק מצביע אל אחד כזה) ולכן אין צורך לקרוא לבנאי עבור x2. כאשר הקצנו זיכרון דינמי, נקרא הבנאי על מנת להקצות את הזיכרון החדש שהוקצה. תופעה זו היא אחת החידושים של הפקודה,new לעומת הפקודה malloc() של C. זיכרון שהוקצה על ידי malloc() לא יאותחל (לא יקרא הבנאי בצורה אוטומטית). לעומת זאת, אם אנו מקצים זיכרון בעזרת,new נקרא הבנאי של המחלקה. הפקודה,delete בצורה דומה, קראה להורס של Rectangle כדי לבצע פעולות ניקוי רגע לפני ששוחרר הזיכרון של האובייקט. בסוף הפונקציה main() שוחרר x1, שהוא משתנה מקומי. כיצד בנאים עוזרים לנו לעמוד בעקרונות של ++C, שקודם דיברנו עליהם? ניזכר במטרה אותה רצינו להשיג: בתוכנית ++C הבנויה כראוי, בכל רגע נתון כל המשתנים מכילים ערכים תקפים. כבר ראינו שהגדרת משתנים רגע לפני שמשתמשים בהם, מצמצמת למינימום את הזמן שיש באובייקטים זבל. בנאים עושים יותר מכך - ברגע שאובייקט נוצר, נקרא הבנאי שלו, שתפקידו לאתחל את השדות השונים באובייקט. אם נכתוב את הבנאי כראוי, נוכל להבטיח שכל אובייקט מהמחלקה שאנו כותבים, יהיה מאותחל בכל רגע. בתוכנית ++C, האובייקטים השונים יוגדרו כאשר יהיה צריך להשתמש בהם. מיד עם ההצהרה עליהם, הם יאותחלו ללא התערבות המתכנת המשתמש באובייקט, על ידי הבנאים. עמוד 25

26 מחלקות בעלות מספר בנאים, רשימות אתחול נחדד כעת מספר נקודות הקשורות לבנאים, ולדרכים בהן כותבים אותם ומשתמשים בהם. נביט בדוגמא הבאה. אנו נשפר דוגמא זו בהדרגה בעמודים הבאים: #include <iostream.h> class myclass private: int p_i, p_j; myclass(); myclass(int i, int j); ; int GetI() return p_i; // Constructors Implematation: (first way) myclass::myclass() p_i = p_j = 0; myclass::myclass(int i, int j) p_i = i; p_j = j; myclass my1; cout << my1.geti() << endl; // Will print 0 (default constructor was called) myclass my2(6, 4); cout << my2.geti() << endl; // Will print 6 (second constructor was called) למחלקה myclass ישנם שני בנאים: myclass(); myclass(int i, int j); כאן אנו רואים שלמחלקה יכול להיות יותר מבנאי אחד. אלו למעשה פונקציות חופפות, אותן כבר ראינו. עמוד 26

27 כאשר יצרנו את האובייקט,my1 נקרא הבנאי ללא הפרמטרים. במקרה זה לא העברנו אף פרמטר למחלקה. לעומת זאת, כאשר יצרנו את האובייקט,my2 יצרנו אותו כך: myclass my2(6, 4); הערכים שבסוגריים הם הערכים שמועברים אל הבנאי המתאים. במקרה זה יקרא הבנאי המקבל שני מספרים שלמים. לעומת הבנאי, ההורס הוא פונקציה שאיננה מקבלת פרמטרים אף פעם, ולפיכך ההורס הוא יחיד. נשתמש במספר בנאים כאשר נרצה לאתחל אובייקטים במספר דרכים - למשל, נניח שנרצה ליצור מחלקה שמטפלת באורכים - נוכל לכתוב בנאי שיקבל,int לכתוב בנאי אחר שיקבל double וכו', וכך לגרום למחלקה שלנו להיות מאותחלת על ידי סוגים שונים של ערכים. נביט כרגע במימוש נוסף של אותה מחלקה: #include <iostream.h> class myclass private: int p_i, p_j; myclass(); myclass(int i, int j); int GetI() return p_i; ; // Constructors Implematation: (second way) myclass::myclass() : p_i(0), p_j(0) // Will be the same as writing inside the constractor: // p_i = 0; p_j = 0; -- but this way is faster and recommended myclass::myclass(int i, int j) : p_i(i), p_j(j) myclass my1; cout << my1.geti() << endl; myclass my2(6, 4); cout << my2.geti() << endl; כאן אנו משתמשים ברשימת אתחול בבנאי. נביט בצורה בה הבנאי מומש: myclass::myclass(int i, int j) : p_i(i), p_j(j) עמוד 27

28 מיד לאחר הצהרת הבנאי, ולפני הסוגריים המסולסלות, מופיעה רשימת האתחול של הבנאי. אנו מתחילים את רשימת האתחול ב":" (נקודותיים). לאחר מכן, כאשר אנו כותבים,p_i(i) אנו אומרים "אתחל את המשתנה p_i לערך i. כל הפעולות שנבצע ברשימת האתחול יתרחשו לפני הכניסה לגוף הבנאי (הבלוק שבתוך הסוגריים המסולסלות). מימוש זה זהה בפעולתו למימוש הקודם, אולם הוא מהיר יותר, ונחשב לתכנות נכון יותר ב++ C. כפי שאנו רואים בשורה הבאה, ניתן לאתחל משתנים לא רק על ידי משתנים אחרים, אלא גם על ידי קבועים: myclass::myclass() : p_i(0), p_j(0) נביט כעת בשיפור נוסף ואחרון לתוכנית קצרה זו. #include <iostream.h> class myclass private: int p_i, p_j; myclass(int i=0, int j=0) : p_i(i), p_j(j) int GetI() return p_i; ; myclass my1; cout << my1.geti() << endl; myclass my2(6, 4); cout << my2.geti() << endl; בדוגמא זו איחדנו את שני הבנאים לבנאי אחד, בעזרת שימוש במנגנון ה Default parameters של ++C. כאשר יצרנו אובייקט ללא פרמטרים, נלקחו ערכי ברירת המחדל בתור הערכים לאתחול האובייקט, וכאשר נתנו ערכים מפורשים, ++C השתמשה בהם כדי לאתחל את האובייקט החדש. לכל פונקציה (פרט לDestructor של מחלקה, שהינו פונקציה חסרת פרמטרים) נוכל להגדיר ערכי ברירת מחדל. בפרט נוכל להגדיר ערכי ברירת מחדל לכל פרמטר בפונקציה של מחלקה, וכן גם לבנאי שלה. בזאת סיימנו עם שיפור הדוגמא הראשונה הקשורה לבנאים. נעבור למספר דוגמאות נוספות, ונציג בהן נקודות נוספות הקשורות לבנאים. עמוד 28

29 Default Constructor לכל מחלקה ב++ C קיים בנאי, בין אם אנו כותבים אחד כזה במפורש, ובין אם לא. נניח למשל שניצור את המחלקה הבאה: class MyClass אם לא נצהיר על בנאי במפורש, ++C תוסיף בזמן הקומפילציה בנאי ברירת מחדל ;.(Default Constructor) הבנאי יהיה בנאי ריק, שלא יבצע כלום, והוא זהה למעשה למחלקה בה קיימת ההצהרה הבאה: MyClass::MyClass() אם נממש בנאי משלנו למחלקה, ++C לא תוסיף למחלקה את בנאי ברירת המחדל. נביט בקוד הבא: class Man private: char *szname; Man(const char *name); ; Man person("nir"); Man no_one; בדוגמא זו, השורה באדום לא תעבור קומפילציה. מכיוון שמימשנו בנאי למחלקה, ++C לא תוסיף למחלקה בנאי ללא פרמטרים, ולכן אי יהיה אפשר ליצור אובייקט בלי לאתחל אותו. ניתן לאמר שבדוגמא זאת מימשנו את הרעיון - "לכל אדם יש שם". ++C לא תיתן לנו להגדיר משתנה מסוג אדם, אם לא ניתן לו שם. באופן דומה, נביט בדוגמא הבאה: class MyClass1 MyClass1(int i); ; class MyClass2 עמוד 29

30 ; MyClass2(); class MyClass3 ; MyClass1 m[100]; /* Illegal */ MyClass2 m1[100]; /* Legal */ MyClass3 m2[100]; /* Legal too - MyClass3 has default constructor that doesn't get any parameters */ השורה המודגשת באדום לא תעבור קומפילציה. כאשר אנו יוצרים מערך, נקרא הבנאי עבור האובייקטים השונים שאנו יוצרים. מכיוון שאנו לא מסוגלים (מבחינת תחבירית) להגדיר את הערכים שיעברו אל הבנאי, כאשר אנו יוצרים מערכים תמיד יקרא בנאי ברירת המחדל, או הבנאי ללא פרמטרים אם הגדרנו כזה. לפיכך, לא ניתן ליצור מערכים של אובייקטים ממחלקות שיש להן רק בנאים בעלי פרמטרים. נביט בדוגמא נוספת הקשורה למערכים. מה תדפיס התוכנית הבאה? #include <iostream.h> class A A() cout << "A"; ; A blah[100]; cout << "Hello World!!!" << endl; התשובה: התוכנית תדפיס את התו A מאה פעמים, ולאחריו ייכתב World!!!.Hello עבור כל איבר ואיבר במערך, נקרא הבנאי. הבנאי נקרא עבור כל איבר במערך, על מנת שכל התאים במערך יכילו עצמים תקפים מסוג A. עמוד 30

31 דוגמא מסכמת לאחר שראינו את נושא הבנאים מכיוונים שונים, נציג תוכנית דוגמא שתסכם את רוב הנושאים שראינו במסמך זה. נציג כעת את המטרה אליה נגיע בתוכנית, ונבנה את התוכנית בשלבים, פונקציה אחר פונקציה. דוגמא זו באה להציג כיצד יש לגשת למימוש מחלקה פשוטה ב++ C. בדוגמא זו נרצה ליצור מחלקה שתייצג בני אדם. לכל בן אדם יש שם, והמחלקה תאפשר לקבל את שמו של בן אדם כלשהו, או להחליף לו את שמו. נביט בהצהרה על המחלקה: class Person char *Name; Person(const char *szname); ~Person(); void print(); void SetName(const char *sznewname); const char *GetName() const; ; הגדרנו שדה מסוג char* בשם,Name שיכיל את שמו של האדם. הבנאי יתאחל שדה זה, הפונקציה GetName() תחזיר לקורא לה את שמו של האדם, והפונקציה SetName() תאפשר לנו לקבוע לאדם שם חדש. הפונקציה Print() תדפיס את שמו של האדם על המסך. נתחיל במימוש הבנאי. על הבנאי להקצות זיכרון עבור,Name ולהעתיק אל Name את המחרוזות אותה הוא מקבל כפרמטר. לכן, נממש את הבנאי בצורה הבאה: Person::Person(const char *szname) Name = new char[strlen(szname)+1]; strcpy(name, szname); ראשית הקצנו זיכרון עבור שמו של האדם (פלוס 1 עבור התו '0\' המסיים את המחרוזת). לאחר מכן העתקנו את המחרוזת הנתונה כפרמטר אל.Name מימוש הפונקציה Print() הוא טריוויאלי. נדפיס את ערכו של Name אל הפלט הסטנדרטי: void Person::print() cout << "My Name: " << Name << endl; עמוד 31

32 גם מימוש הפונקציה GetName() איננו קשה במיוחד. הפונקציה פשוט מחזירה את ערכו של :Name const char *Person::GetName() const return Name; ההורס של המחלקה צריך לשחרר את הזיכרון הדינמי שהקצנו עבור :Name Person::~Person() delete[] Name; מכיוון שהקצנו מערך של,char נשתמש ב- delete[] על מנת לשחרר אותו. עד כה, ראינו נקודות פשוטות, אך חשובות, כאשר אנו יוצרים מחלקה, המשתמשת בזיכרון דינמי. נביט כעת בפונקציה המעניינת ביותר במחלקה,.SetName() מהן הפעולות שעל פונקציה זו לבצע? ראשית, נזכור שאנו עובדים ב++ C, ולכן אנו מניחים כי האובייקט נמצא כל העת במצב תקין, מאותחל. ומכאן: כאשר קוראים לפונקציה,SetName() מוקצה כרגע כבר זיכרון עבור השם הקודם. גישה נאיבית תאמר כעת: הזיכרון כבר מוקצה, ולכן אין צורך להקצות שוב זיכרון, לכן רק נעתיק את המחרוזת החדשה במקום המחרוזת הישנה, ונסיים את הפונקציה. למשל, נוכל לממש גישה זו בצורה הבאה: void Person::SetName(const char *sznewname) strcpy(name, sznewname); פתרון זה איננו נכון! איננו מתייחסים כאן לעובדה, כי יכול להיות שהשם החדש אותו נרצה לתת לאדם, הינו בגודל שונה מהשם הישן שלו. אם השם החדש קטן מהשם הישן, לא תהיה בעיה במימוש, מלבד העובדה שמעט מהזיכרון שהקצנו יישאר מוקצה אך ללא שימוש מעשי. אם השם החדש גדול מהשם הישן, תתרחש דליפת זיכרון. לפיכך, הגישה הנכונה תהיה ראשית לשחרר את הזיכרון שהקצנו עבור השם הישן, ואז להקצות זיכרון לשם החדש. עמוד 32

33 להלן מימוש נכון של הפונקציה :SetName() void Person::SetName(const char *sznewname) delete[] Name; Name = new char[strlen(sznewname) + 1]; strcpy(name, sznewname); ראשית אנו משחררים את הזיכרון הישן, ואז אנו מקצים זיכרון חדש בגודל הרצוי ומציבים אותו במשתנה.Name #include <iostream.h> #include <string.h> לסיום, נציג את המחלקה שבנינו בשלמותה: class Person char *Name; Person(const char *szname) Name = new char[strlen(szname)+1]; strcpy(name, szname); cout << "ctor" << endl; void print() cout << "MyName: " << Name << endl; ~Person() delete[] Name; void SetName(const char *sznewname) delete[] Name; Name = new char[strlen(sznewname) + 1]; strcpy(name, sznewname); ; const char *GetName() const return Name; עמוד 33

34 סיום מסמך זה מגיע אל סיומו. במסמך זה סקרנו בקצרה את הנושאים הבסיסיים ביותר בשפת ++C, אולם ל-++ C יש הרבה יכולות להציע מעבר לאלו שראינו במסמך זה, ואף הנושאים שהוצגו במסמך זה, לא מוצו עד תום. לסיום המסמך, נציג דוגמא אחרונה, ללא הסברים רבים, שתציג את אחת התכונות החשובות ב++ C - הורשה. רעיון ההורשה הוא אחד הרעיונות החזקים ביותר של ++C: לאחר שהגדרנו מחלקה, נרצה להשתמש בה גם במחלקות אחרות. דרך אחת הינה להגדיר אובייקט מסוג מחלקה אחת בתוך מחלקה אחרת. אולם, לפעמים נרצה להגדיר מחלקה אחת, ולאחר מכן להגדיר מחלקה שניה, שהיא מקרה פרטי של המחלקה הראשונה. לדוגמא: לאחר שהגדרנו בדוגמא הקודמת את המחלקה "בן אדם", יתכן שנרצה להגדיר עכשיו את המחלקה "זמר". "זמר" הוא בפרט "בן אדם", וכולל את כל התכונות של "בן אדם". בנוסף לכך הוא כולל תכונה נוספת. "זמר" יודע לשיר. ++C נותנת לנו אפשרות להגדיר מחלקה נוספת - שתקבל את כל המשתנים והפונקציות (עם הגבלות מסוימות) של המחלקה המקורית, וכך לא נצטרך לממשם שוב עבור המחלקה השניה. נציג דוגמת קוד לכך: נרצה לממש מחלקה שתייצג מלבן, ושתוכל להדפיס מלבן על המסך, וכן לחשב את שיטחו של המלבן. לאחר מכן נממש בעזרתה מחלקה מסוג ריבוע, שהוא מקרה פרטי של מלבן. להלן מימוש מחלקת המלבן: #include <iostream.h> class myrectangle int Area(); void SetX(int vx) if (vx >= 0) m_x = vx; void SetY(int vy) if (vy >= 0) m_y = vy; void Print(); myrectangle(int x, int y) : m_x(x), m_y(y) ~myrectangle() private: int m_x, m_y; ; int myrectangle::area() return m_x * m_y; עמוד 34

35 // Function that prints the Rectangle on the screen void myrectangle::print() for (int x = 0; x < m_x; ++x) for (int y = 0; y < m_y; ++y) cout<<'*'; cout<<endl; // New line at the end of the shape cout<<endl; פרטי המימוש של המחלקה אינם מסובכים, והקורא יוכל לעמוד על הדקויות בהן לבדו. נממש כעת את המחלקה ריבוע, שתיגזר (תקבל את כל התכונות) של המחלקה מלבן. על מנת לציין שהמחלקה ריבוע נגזרת מהמחלקה מלבן, נצהיר על המחלקה ריבוע כך: class Square : public myrectangle בצורה כזו המחלקה קיבלה את המתודות והשדות השונים של מחלקת המלבן. כאשר אנו כותבים,public myrectangle אנו אומרים כי כל שדות ה- public של המחלקה,myRectangle יהיו גם בשדות ה- public של המחלקה.Square אם היינו כותבים,private myrectangle היינו אומרים כל שדות ה- public של המחלקה,myRectangle יהפכו להיות שדות private במחלקה.Square לרוב נשתמש ב- public כאשר נגזור מחלקה ממחלקה. להלן מימוש המחלקה: class Square : public myrectangle Square(int x) : myrectangle(x, x) ; void SetX(int vx) myrectangle::setx(vx); myrectangle::sety(vx); void SetY(int vy) SetX(vY); עמוד 35

36 נשים לב למספר דברים חדשים במימוש זה: הבנאי הוגדר בצורה הבאה: Square(int x) : myrectangle(x, x) משמעות כתיבה זו: הבנאי של Square קורא לבנאי של,myRectangle ומעביר לו את הפרמטרים,x. x void Square::SetX(int vx) myrectangle::setx(vx); myrectangle::sety(vx); אנו מממשים מחדש עבור הריבוע את הפונקציות SetX() ו-() SetY, מכיוון שבריבוע, שינוי אורך צלע גורר שינוי אורך של כל הצלעות. כאשר אנו כותבים את הביטוי myrectangle::setx(vx) בתוך הפונקציה, אנו למעשה אומרים ל++ C להשתמש בפונקציה SetX() שירשנו מהמחלקה,myRectangle ולא לקרוא לפונקציה SetX() שמוגדרת מחדש במחלקה.Square נדגים כעת שימוש בתוכנית: myrectangle myrec(5, 4); myrec.print(); Square mysqr(7); mysqr.print(); mysqr.setx(2); mysqr.print(); cout << "Square Area is : " << mysqr.area() << endl; כעת אנו רואים את יתרון תכונת ההורשה של ++C בבירור. את הפונקציות Area() ו-() Print לא מימשנו במפורש עבור הריבוע, אולם מנגנון ההורשה מאפשר לנו להשתמש בפונקציות אלו, השייכות למלבן. בצורה זו, חסכנו לעצמנו כתיבה. מימשו במחלקה ריבוע רק את הפונקציות הקשורות ספציפית לריבוע, ולא למלבן, ואת כל השאר קיבלנו בצורה שקופה מהמלבן. -EOF- עמוד 36

ASP.Net MVC + Entity Framework Code First.

ASP.Net MVC + Entity Framework Code First. ASP.Net MVC + Entity Framework Code First 1 הקדמה בפרק הזה יוצג שימוש בFirst EntityFramework Code עבור ה use case הבאים : ASP.Net MVC ASP.Net Web API ASP.Net MVC + Scaffolding הערה : Framework Entity הוצג

More information

תצוגת LCD חיבור התצוגה לבקר. (Liquid Crystal Display) המערכת.

תצוגת LCD חיבור התצוגה לבקר. (Liquid Crystal Display) המערכת. 1 (Liquid Crystal Display) תצוגת LCD בפרויקט ישנה אפשרות לראות את כל הנתונים על גבי תצוגת ה- LCD באופן ברור ונוח. תצוגה זו היא בעלת 2 שורות של מידע בעלות 16 תווים כל אחת. המשתמש יכול לראות על גבי ה- LCD

More information

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 כל מה שמעצב משחקים צריך לדעת בשביל לעבוד עם מתכנתים משחק בול פגיעה שעור 2 1P 0 AS3 2P 0 HIGH SCORE RANK SCORE NAME CREDIT 15 1ST 00045000 I.M 2ND 00039500

More information

מבוא לתכנות ב- JAVA תרגול 7

מבוא לתכנות ב- JAVA תרגול 7 מבוא לתכנות ב- JAVA תרגול 7 שאלה )מועד א 2013( לפניך מספר הגדרות: תת מילה של המילה word הינה רצף של אותיות עוקבות של word פלינדרום באורך le היא מילה בעלת le אותיות שניתן לקרוא אותה משמאל לימין וגם מימין

More information

טכנולוגיית WPF מספקת למפתחים מודל תכנות מאוחד לחוויית בניית יישומיי

טכנולוגיית WPF מספקת למפתחים מודל תכנות מאוחד לחוויית בניית יישומיי WPF-Windows Presentation Foundation Windows WPF טכנולוגיית WPF מספקת למפתחים מודל תכנות מאוחד לחוויית בניית יישומיי Client חכמים המשלב ממשקי משתמש,תקשורת ומסמכים. מטרת התרגיל : ביצוע אנימציה לאליפסה ברגע

More information

Rules Game (through lesson 30) by Nancy Decker Preparation: 1. Each rule board is immediately followed by at least three cards containing examples of

Rules Game (through lesson 30) by Nancy Decker Preparation: 1. Each rule board is immediately followed by at least three cards containing examples of Rules Game (through lesson 30) by Nancy Decker Preparation: 1. Each rule board is immediately followed by at least three cards containing examples of the rule. (Choose three cards appropriate to the lesson

More information

ניפוי שגיאות )Debug( מאת ישראל אברמוביץ

ניפוי שגיאות )Debug( מאת ישראל אברמוביץ ניפוי שגיאות )Debug( מאת ישראל אברמוביץ בדף העבודה יש תירגול בסביבת העבודה לשפת #C לסביבות עבודה אחרות. )2015 )Visual Studio אך היא מתאימה גם לשפת Java וגם o 1. ריצה של כל התוכנית ועצירה בסוף יש לבחור

More information

תרגול מספר 9: בנאים, שיטות של אובייקטים והכמסה מבוא למדעי המחשב - סמסטר א' תשע"א,תרגול מס' 9. נושאי התרגול: this

תרגול מספר 9: בנאים, שיטות של אובייקטים והכמסה מבוא למדעי המחשב - סמסטר א' תשעא,תרגול מס' 9. נושאי התרגול: this תרגול מספר 9: בנאים, שיטות של אובייקטים והכמסה נושאי התרגול: this Shallow Copy, Deep Copy )Encapsulation( הכמסה )visibility modifiers( הגבלת גישה Setters ו- Getters )Exceptions( חריגות בתרגול הקודם הכרנו

More information

קשירות.s,t V שני צמתים,G=(V,E) קלט: גרף מכוון מ- s t ל- t ; אחרת.0 אם יש מסלול מכוון פלט: הערה: הגרף נתון בייצוג של רשימות סמיכות.

קשירות.s,t V שני צמתים,G=(V,E) קלט: גרף מכוון מ- s t ל- t ; אחרת.0 אם יש מסלול מכוון פלט: הערה: הגרף נתון בייצוג של רשימות סמיכות. סריקה לרוחב פרק 3 ב- Kleinberg/Tardos קשירות.s,t V שני צמתים,G=(V,E) קלט: גרף מכוון מ- s t ל- t ; אחרת.0 אם יש מסלול מכוון פלט: הערה: הגרף נתון בייצוג של רשימות סמיכות. קשירות.s,t V שני צמתים,G=(V,E) קלט:

More information

זה. Nir Adar

זה. Nir Adar גירסה 28.4.2003-1.00 האסמבלי של 8086 חלק שני מסמך זה הורד מהאתר. אין להפיץ מסמך זה במדיה כלשהי, ללא אישור מפורש מאת המחבר. מחבר המסמך איננו אחראי לכל נזק, ישיר או עקיף, שיגרם עקב השימוש במידע המופיע במסמך,

More information

המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית

המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית המחלקה למדעי המחשב, אוניברסיטת בן גוריון מבני נתונים, סמסטר אביב 2102 עבודת בית מספר - 2 מעשית נושאים: מערכים, רשימות מרצה ומתרגלים אחראים: איתן בכמט, איסנה וקסלר, רז ניסים תאריך פרסום: 11.21 תאריך הגשה:

More information

בוחן בתכנות בשפת C בצלחה

בוחן בתכנות בשפת C בצלחה בוחן בתכנות בשפת C ) כתוב תכנית הקולטת ממשתמש מספרים שלמים ומדפיסה כמה מספרים היו גדולים מ-, כמה מספרים היו קטנים מ-, וכמה מספרים היו שווים ל-. 2) כתוב תכנית הקלטת עשרה מספרים טבעיים ומחשבת את הממוצע שלהם.

More information

זו מערכת ישרת זוית )קרטזית( אשר בה יש לנו 2 צירים מאונכים זה לזה. באותו מישור ניתן להגדיר נקודה על ידי זוית ורדיוס וקטור

זו מערכת ישרת זוית )קרטזית( אשר בה יש לנו 2 צירים מאונכים זה לזה. באותו מישור ניתן להגדיר נקודה על ידי זוית ורדיוס וקטור קארדינטת קטבית y p p p במישר,y הגדרנ נקדה על ידי המרחקים מהצירים. ז מערכת ישרת זית )קרטזית( אשר בה יש לנ צירים מאנכים זה לזה. באת מישר ניתן להגדיר נקדה על ידי זית רדיס קטר. (, ) הרדיס קטר מסתבב )נגד כין

More information

A R E Y O U R E A L L Y A W A K E?

A R E Y O U R E A L L Y A W A K E? A R E Y O U R E A L L Y A W A K E? ב ר ו ך א ת ה י י א לה ינ ו מ ל ך ה עו ל ם, ה מ ע ב יר ש נ ה מ ע ינ י ות נ ומ ה מ ע פ ע פ י Blessed are You, Hashem our God, King of the Universe, who removes sleep from

More information

Practical Session No. 13 Amortized Analysis, Union/Find

Practical Session No. 13 Amortized Analysis, Union/Find Practical Session No. 13 Amortized Analysis, Union/Find Amortized Analysis Refers to finding the average running time per operation, over a worst-case sequence of operations. Amortized analysis differs

More information

A JEW WALKS INTO A BAR: JEWISH IDENTITY IN NOT SUCH JEWISH PLACES

A JEW WALKS INTO A BAR: JEWISH IDENTITY IN NOT SUCH JEWISH PLACES A JEW WALKS INTO A BAR: JEWISH IDENTITY IN NOT SUCH JEWISH PLACES Sinning in Disguise Like people of all faiths, Jews sometimes do things or go to places they are not supposed to. This session is not about

More information

Patents Basics. Yehuda Binder. (For copies contact:

Patents Basics. Yehuda Binder. (For copies contact: Patents Basics Yehuda Binder (For copies contact: elissa@openu.ac.il) 1 Intellectual Property Value 2 Intellectual Property Rights Trademarks Copyrights Trade Secrets Patents 3 Trademarks Identify a source

More information

Redirection The Input Buffer

Redirection The Input Buffer מבוא לשפת C תירגול 3: טיפוסים והמרות 1 מה היה שבוע שעבר? משתנים קלט/פלט scanf) ו- printf ) Redirection The Input Buffer 2 תוכנייה טיפוסי משתנים קלט/פלט מעוצב המרה בין טיפוסים 3 חישוב ממוצע בין שני מספרים

More information

Reflection Session: Sustainability and Me

Reflection Session: Sustainability and Me Goals: Participants will: identify needs in their home communities apply their sustainability learning to the conditions of their home communities design a sustainable project idea and evaluate the ideas

More information

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 134 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 37

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 134 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 37 FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO. 652082/2014 NYSCEF DOC. NO. 134 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 37 Translated from the Hebrew Sharf Translations Message sent From: Tomer Shohat

More information

תרגול 8. Hash Tables

תרגול 8. Hash Tables תרגול Hash Tables ds-ps חידה מהשיעור הקודם בכל השקים המטבעות שוקלים ורק בשק אחד המטבעות שוקלים.. מותר לנו לבצע שקילה אחת בלבד! איך נדע מה השק הקל יותר? שקים עם מטבעות ds-ps מה היה לנו דיברנו על מבני נתונים

More information

המבנה הגאומטרי של מידה

המבנה הגאומטרי של מידה התוכנה מאפשרת לרשום מידות מסוגים שונים בסרטוט, במגוון סגנונות ובהתאם לתקנים המקובלים. רצוי לבצע מתן מידות בשכבה המיועדת לכך. לכל מידה יש תכונות של בלוק. תהליך מתן המידות מתחיל תמיד מקביעת סגנון המידות.

More information

מכונת מצבים סופית תרגול מס' 4. Moshe Malka & Ben lee Volk

מכונת מצבים סופית תרגול מס' 4. Moshe Malka & Ben lee Volk מכונת מצבים סופית תרגול מס' 4 1 מכונת מצבים סופית Finite State Machine (FSM) מודל למערכת ספרתית מכונת מצבים סופית: קלט: סדרה אינסופית של אותיות...,I3,I1,I2 בא"ב input out פלט: סדרה אינסופית של אותיות O

More information

דיאגרמה לתיאור Classes

דיאגרמה לתיאור Classes 1 דיאגרמה לתיאור Classes הקדמה לדיאגרמת Classes כללים במתן שמות ל- Classes שאנו מתארים הרשאות גישה של מרכיבי ה- Class השונים משתנים (Attributes) שמוגדרים ב- Class משתנים סטטיים Attributes) (Static מתודות

More information

מספר ת"ז: יש לסמן את התשובה הטובה ביותר בתשובון. לא יינתן ניקוד על סימון תשובה בטופס הבחינה או במחברת הבחינה.

מספר תז: יש לסמן את התשובה הטובה ביותר בתשובון. לא יינתן ניקוד על סימון תשובה בטופס הבחינה או במחברת הבחינה. עמוד 1 עמוד 1 מתוך 11, בחינה בתוכנה 1 מספר סידורי: מספר ת"ז: סמסטר א' תשע"ז, מועד א', 11 בפברואר 117 ליאור וולף, תומר עזרא, לנה דנקין משך הבחינה שלוש שעות יש להניח שהקוד שמופיע במבחן מתאים לגירסה 7 של

More information

עץ תורשה מוגדר כך:שורש או שורש ושני בנים שכל אחד מהם עץ תורשה,כך שערך השורש גדול או שווה לסכום הנכדים(נכד-הוא רק בן של בן) נתון העץ הבא:

עץ תורשה מוגדר כך:שורש או שורש ושני בנים שכל אחד מהם עץ תורשה,כך שערך השורש גדול או שווה לסכום הנכדים(נכד-הוא רק בן של בן) נתון העץ הבא: שאלה 1 עץ תורשה מוגדר כך:שורש או שורש ושני בנים שכל אחד מהם עץ תורשה,כך שערך השורש גדול או שווה לסכום הנכדים(נכד-הוא רק בן של בן) נתון העץ הבא: 99 80 50 15 40 34 30 22 10 13 20 13 9 8 א. ב. ג. האם העץ

More information

ל"תוכנה" שכותבים, כמו פונקציה זו, קוראים "קוד"

לתוכנה שכותבים, כמו פונקציה זו, קוראים קוד הגדרת פונקציות מבוא לתכנות מדעי וסטטיסטי R פונקציות, ו חלק 4 בנוסף לפונקציות שמגיעות מוכנות יחד עם המערכת exp) mean,,c וכו'), אפשר לכתוב פונקציות חדשות פונקציות נקראות לעתים "פרוצדורות" או "סאב-רוטינות"

More information

פולימורפיזם. blog.csit.org.il מדעי המחשב

פולימורפיזם. blog.csit.org.il מדעי המחשב 1 פולימורפיזם להסתכל על אותו אובייקט בצורות שונות. אובייקט של תת-מחלקה )המחלקה הנגזרת( הוא גם אובייקט של מחלקת העל )מחלקת הבסיס( )כלב הוא גם בעל-חיים וגם יונק(. פולימורפיזם מאפשר להשיג שתי מטרות: לטפל

More information

Structural Vs. Nominal Typing

Structural Vs. Nominal Typing שפות תכנות 234319 פרופ' יוסי גיל הפקולטה למדעי המחשב, הטכניון מכון טכנולוגי לישראל קיץ 2013 הרצאה מס' 6: טיפוסיות שמית ומבנית רשמה: איריס קלקה kalka.iris@gmail.com בשלב זה בקורס אנו עוסקים בתורת הטיפוסים.

More information

מבוא למחשב בשפת פייתון

מבוא למחשב בשפת פייתון 234221 מבוא למחשב בשפת פייתון 3 מבני בקרה ולולאות פרופ' ראובן בר-יהודה דין לייטרסדורף הפקולטה למדעי המחשב הטכניון מכון טכנולוגי לישראל נערך ע"י יעל ארז 1 פקודות והזחות 2 פקודה פשוטה >>> 3+2 5 >>> x = 5

More information

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 כל מה שמעצב משחקים צריך לדעת בשביל לעבוד עם מתכנתים משחק טקסט שעור 3 1P 0 AS3 2P 0 HIGH SCORE RANK SCORE NAME CREDI 15 1S 00079000 G. 2ND 00079000 S.G 3RD

More information

הבסיס כתיבת התכנית הראשונה שימוש במשתנים. הטיפוס הבסיסי object. הטיפוס הבסיסי string משפטי בקרה. שימוש ב- Enumerations. שימוש ב- Namespaces

הבסיס כתיבת התכנית הראשונה שימוש במשתנים. הטיפוס הבסיסי object. הטיפוס הבסיסי string משפטי בקרה. שימוש ב- Enumerations. שימוש ב- Namespaces 1 הבסיס כתיבת התכנית הראשונה שימוש במשתנים הטיפוס הבסיסי object הטיפוס הבסיסי string משפטי בקרה שימוש ב- Enumerations שימוש ב- Namespaces המתודה Main כתיבת הערות פקודות קדם מהדר 2 כתיבת התכנית הראשונה

More information

התכנית הראשונה שלי

התכנית הראשונה שלי 2-1 מבנה התכנית התכנית הראשונה שלי מחלקה מגדירה עצם. עצמים מתקשרים ביניהם באמצעות תכנית מ נ ח ה. בפרקים הבאים נכיר תחילה את המנחה ואת הוראות השפה, ובהמשך נלמד לשלב גם עצמים. לפניך תכנית בשפת.Java התכנית

More information

כפתור רדיו בחירה בודדת מתוך רשימת אפשרויות

כפתור רדיו בחירה בודדת מתוך רשימת אפשרויות תכנות בסביבת האינטרנט 1 כפתור רדיו בחירה בודדת מתוך רשימת אפשרויות כפתור רדיו משמש למקרים שבהם יש לבחור באפשרות אחת מתוך רשימת האפשרויות שבקבוצה. למשל: שאלון רב-ברירות )שאלון אמריקאי( שבו יש רק תשובה אחת

More information

Hebrew Ulpan HEB Young Judaea Year Course in Israel American Jewish University College Initiative

Hebrew Ulpan HEB Young Judaea Year Course in Israel American Jewish University College Initiative Hebrew Ulpan HEB 011-031 Young Judaea Year Course in Israel American Jewish University College Initiative Course Description Hebrew is not only the Sacred Language of the Jewish people, but it is also

More information

מערכים Haim Michael. All Rights Reserved.

מערכים Haim Michael. All Rights Reserved. 1 מערכים יצירת מערך הפונקציה var_dump הפונקציה print_r אופן הפעולה של מערך מערך דו מימדי הפקודה list האופרטור,+,==,===!= ו-!== הפונקציה count הפונקציה is_array הפונקציה isset הפונקציה array_key_exists

More information

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0

מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 מבוא לתכנות - פיתוח משחקים ב Action Script 3.0 כל מה שמעצב משחקים צריך לדעת בשביל לעבוד עם מתכנתים תנועה בעזרת קוד שעור 9 הישגיים 2 1P 0 AS3 2P 0 HIGH SCORE RANK SCORE NAME CREDIT 15 1ST 00472000 G.F 2ND

More information

מבוא למחשב בשפת Matlab

מבוא למחשב בשפת Matlab מבוא למחשב בשפת Matlab תרגול 10: רקורסיה מבוסס על שקפי הקורס "מבוא למדעי המחשב" ובסיוע שקפים של ערן אדן כל הזכויות שמורות לטכניון מכון טכנולוגי לישראל תזכורת: פונקציות להלן קוד של פונקציה בשם :func function

More information

למבחן ביסודות מדעי המחשב דוגמא

למבחן ביסודות מדעי המחשב דוגמא פרק א' למבחן ביסודות מדעי המחשב דוגמא כתוב תכנית הקולט מספר למשתנה N ולאחריו N מספרים שלמים ומדפיס את כמות המספרים המתחלקים ב 3 - ללא שארית. (10 נקודות). כתוב ביטוי בוליאני המייצג את התנאי הבא: ספרת העשרות

More information

מותאמת לסביבת. Visual C# 2005 Express שונות. ולבצע rename לשם המבוקש

מותאמת לסביבת. Visual C# 2005 Express שונות. ולבצע rename לשם המבוקש מאגר מעבדות לשפות התכנות החדשות ניתן להשתמש בחומרים לצורך הוראה בלבד. לא ניתן לפרסם את החומרים או לעשות בהם כל שימוש מסחרי ללא קבלת אישור מראש מצוות הפיתוח בראשות ד"ר תמר פז. המעבדה בקובץ זה מיועדת לתלמידים

More information

מבנה התכנית יסודות מדעי המחשב התכנית הראשונה שלי

מבנה התכנית יסודות מדעי המחשב התכנית הראשונה שלי 2-1 מבנה התכנית התכנית הראשונה שלי מחלקה מגדירה עצם. עצמים מתקשרים ביניהם באמצעות תכנית מ נ ח ה. בפרקים הבאים נכיר את המנחה ואת הוראות השפה, ובהמשך נלמד לשלב גם עצמים. לפניך תכנית בשפת #C. התכנית קולטת

More information

יסודות מבני נתונים. תרגול :9 ערימה - Heap

יסודות מבני נתונים. תרגול :9 ערימה - Heap יסודות מבני נתונים תרגול :9 ערימה - Heap maximum שאלה: כמה זמן לוקח לחפש איבר בערימה? תשובה:,O(n) למרות שבערימה קיים סדר מסויים. Heaps 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 דוגמה: 7 11 13 21 12 17 20 34

More information

State Pattern מימוש מכונת מצבים (FSM) מבוא בעיה תמיכה ועדכונים עדכון מס' 48 מאי 2002

State Pattern מימוש מכונת מצבים (FSM) מבוא בעיה תמיכה ועדכונים עדכון מס' 48 מאי 2002 1 מרכז ההדרכה 2000 תמיכה ועדכונים עדכון מס' 48 מאי 2002 מימוש מכונת מצבים (FSM) באמצעות State Pattern מבוא מכונת מצבים סופית Machine) (Final State היא מודל מקובל בניתוח מערכות באופן כללי, ומערכות חומרה

More information

קורס מטלב לפיסיקאים שיעור מס' 10: משתנים מורכבים

קורס מטלב לפיסיקאים שיעור מס' 10: משתנים מורכבים שיעור מס' : משתנים מורכבים מערכי תאים מערך תאים הוא מערך שבו כל איבר בעצמו הוא מערך מסוג ומימדים כלשהם. לדוגמא מערך עמודה: מס' איבר 2 3 4 5 תוכן סקלר נומרי סקלר לוגי מטריצה נומרית 2 3 6 מערך-תאים (שורה

More information

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון.

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון. - 37-3 פרק מחלקות ובנייה הגדרה בפרק הקודם ראינו כיצד ניתן להשתמש במחלקות קיימות על מנת ליצור עצמים, צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. אך מתכנת בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק

More information

סה"כ נקודות סה"כ 31 נקודות סה"כ 21 תוכן עניינים של פתרון המבחן. לולאת for )נתון אלגוריתם... מעקב, פלט

סהכ נקודות סהכ 31 נקודות סהכ 21 תוכן עניינים של פתרון המבחן. לולאת for )נתון אלגוריתם... מעקב, פלט מבחן 0220 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדיקות אחרונות לפני מסירה )עמודים 8-11( מבנה השאלון 5

More information

שאלות חזרה לקראת מבחן מפמ"ר אינטרנט וסייבר

שאלות חזרה לקראת מבחן מפמר אינטרנט וסייבר שאלות חזרה לקראת מבחן מפמ"ר אינטרנט וסייבר שאלה.1 ייצוג מידע בטבלה שלפניכם מספרים בבסיס. כל מספר מיוצג ע"י 5 סיביות. 10011 = 01100 = 00111 = 11000 = 11010 = 00101 = 10000 = 01111 = ד. יש להשלים את הערך

More information

2007 Zindell Technologies, Ltd.

2007 Zindell Technologies, Ltd. 1 הורשה )Inheritance( הקדמה Derivation Syntax אופן הגדרתה של מחלקה שיורשת מאחרת - משמעות ההורשה - Effects Inheritance הרשאות הגישה Modifiers Access הגדרתן מחדש של מתודות שהגיעו בהורשה - Methods Overriding

More information

עד כה עסקנו בתוכניות שמתקדמות פקודה אחרי פקודה העתק ל- ax את הערך 3 העתק ל- bx את הערך 4 הוסף ל- ax את bx כפול את התוצאה ב- 2 והעתק ל- cx

עד כה עסקנו בתוכניות שמתקדמות פקודה אחרי פקודה העתק ל- ax את הערך 3 העתק ל- bx את הערך 4 הוסף ל- ax את bx כפול את התוצאה ב- 2 והעתק ל- cx 1 ברק גונן עד כה עסקנו בתוכניות שמתקדמות פקודה אחרי פקודה העתק ל- ax את הערך 3 העתק ל- bx את הערך 4 הוסף ל- ax את bx כפול את התוצאה ב- 2 והעתק ל- cx לעיתים נרצה שהתוכנית תבצע פקודות רק אם מתקיים תנאי מוגדר

More information

תכנות בטוח חלק ב ' מאת עידו קנר

תכנות בטוח חלק ב ' מאת עידו קנר תכנות בטוח חלק ב' מאת עידו קנר הקדמה מאמר זה הינו חלק ההמשך של המאמר העוסק בנושא "התכנות הבטוח" אשר פורסם בגליון השביעי של.Digital Whisper בחלק הקודם הצגתי מקרים מאוד פשוטים וברורים אודות כמה מגישות בתכנות

More information

DNS פרק 4 ג' ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים 1

DNS פרק 4 ג' ברק גונן מבוסס על ספר הלימוד רשתות מחשבים עומר רוזנבוים 1 DNS פרק 4 ג' שכבת האפליקציה, פרוטוקול ברק גונן מבוסס על ספר הלימוד "רשתות מחשבים" עומר רוזנבוים מאת 1 בסיום הפרק נדע: מה תפקיד פרוטוקול?DNS לשם מה צריך?DNS מהי ההיררכיה של כתובות דפי האינטרנט? מהו,TLD

More information

T H E S U N F L O W E R L I M I T S T O F O R G I V E N E S S

T H E S U N F L O W E R L I M I T S T O F O R G I V E N E S S T H E S U N F L O W E R L I M I T S T O F O R G I V E N E S S Time needed Age range Background of teen Set up 30 mins Any teen Any background Classroom style Goals: The Jewish approach to forgiveness,

More information

מ ש ר ד ה ח י נ ו ך ה פ ד ג ו ג י ת א ש כ ו ל מ ד ע י ם על ה ו ר א ת ה מ ת מ ט י ק ה מחוון למבחן מפמ"ר לכיתה ט', רמה מצומצמת , תשע"ב טור א'

מ ש ר ד ה ח י נ ו ך ה פ ד ג ו ג י ת א ש כ ו ל מ ד ע י ם על ה ו ר א ת ה מ ת מ ט י ק ה מחוון למבחן מפמר לכיתה ט', רמה מצומצמת , תשעב טור א' ה פ ו י ת ש כ ו ל מ ע י ם על ה ו ר ת ה מ ת מ ט י ק ה כ" ייר, תשע".5.0 מחוון למחן מפמ"ר לכיתה ט', רמה מצומצמת 0, תשע" שלה סעיף תשוות טור ' ניקו מפורט והערות תשוה: סעיף III נקוות תשוה מלה נק' לכל שיעור משיעורי

More information

תרגיל בית מספר - 1 להגשה עד 9 בנובמבר בשעה 23:55

תרגיל בית מספר - 1 להגשה עד 9 בנובמבר בשעה 23:55 תרגיל בית מספר - 1 להגשה עד 9 בנובמבר בשעה 23:55 קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס, תחת התיקייה.assignments חריגה מההנחיות תגרור ירידת ציון / פסילת התרגיל. הנחיות והערות ספציפיות

More information

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון.

פרק מחלקות ממשק המחלקה צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק נתון. - 37-3 פרק מחלקות ובנייה הגדרה בפרק הקודם ראינו כיצד ניתן להשתמש במחלקות קיימות על מנת ליצור עצמים, צריך גם לדעת להגדיר בתוכניתו מחלקות לפי הצורך. אך מתכנת בפרק זה נלמד להגדיר מחלקה ולממשה על סמך ממשק

More information

אנגלית (MODULE E) בהצלחה!

אנגלית (MODULE E) בהצלחה! 3 בגרות סוג הבחינה: מדינת ישראל חורף תשע"ט, 2019 מועד הבחינה: משרד החינוך 016481 מספר השאלון: א. משך הבחינה: שעה ורבע אנגלית שאלון ה' (MODULE E) ג רסה א' הוראות לנבחן מבנה השאלון ומפתח ההערכה: בשאלון זה

More information

פקס בחיבור המכשיר המשולב לפקס יש לעבור על השלבים הבאים: - חבר את כבל הטלפון לחיבור ה- LINE בגב המדפסת ואת צידו השני לשקע הטלפון בקיר.

פקס בחיבור המכשיר המשולב לפקס יש לעבור על השלבים הבאים: - חבר את כבל הטלפון לחיבור ה- LINE בגב המדפסת ואת צידו השני לשקע הטלפון בקיר. פקס בחיבור המכשיר המשולב לפקס יש לעבור על השלבים הבאים: חבר את כבל הטלפון לחיבור ה LINE בגב המדפסת ואת צידו השני לשקע הטלפון בקיר שקע LINE שקע טלפון בקיר במידה ויש בנקודה הנוכחית טלפון נוסף, יש באפשרותך

More information

מבחן מועד ב' אנא קיראו היטב את ההראות שלהלן:

מבחן מועד ב' אנא קיראו היטב את ההראות שלהלן: מבחן מועד ב' תאריך הבחינה: 3.3.2015 שמות המרצים: דר' רועי זיון פרופ' משה זיפר פרופ' מיכאל קודיש דר' צחי רוזן גב' מיכל שמש שם הקורס: מבוא למדעי המחשב אנא קיראו היטב את ההראות שלהלן: מספר הקורס: 202-1-1011

More information

תאריך הבחינה: מבוא למדעי המחשב ד "ר פז כרמי פרופ' מייק קודיש ד "ר חן קיסר ד "ר צחי רוזן שם הקורס: מבוא למדעי המחשב מספר הקורס:

תאריך הבחינה: מבוא למדעי המחשב ד ר פז כרמי פרופ' מייק קודיש ד ר חן קיסר ד ר צחי רוזן שם הקורס: מבוא למדעי המחשב מספר הקורס: מבוא למדעי המחשב 202-1-1011 מבחן אנא קראו את ההוראות שלהלן בעיון: תאריך הבחינה: 622011 שמות המרצים: מר שי זקוב ד "ר פז כרמי פרופ' מייק קודיש ד "ר חן קיסר ד "ר צחי רוזן שם הקורס: מבוא למדעי המחשב מספר הקורס:

More information

אנגלית שאלון ז' ג רסה א' הוראות לנבחן בהצלחה! )4( ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנות ולנבחנים כאחד. (MODULE G)

אנגלית שאלון ז' ג רסה א' הוראות לנבחן בהצלחה! )4( ההנחיות בשאלון זה מנוסחות בלשון זכר ומכוונות לנבחנות ולנבחנים כאחד. (MODULE G) 3 בגרות סוג הבחינה: מדינת ישראל חורף תשע"ט, 2019 מועד הבחינה: משרד החינוך 016582 מספר השאלון: א. משך הבחינה: שעה וארבעים וחמש דקות אנגלית שאלון ז' (MODULE G) ג רסה א' הוראות לנבחן מבנה השאלון ומפתח ההערכה:

More information

ניסוי בפייתון מכון טכנולוגי לישראל הניסוי מתקיים בבניין פישבך, חדר 573 )במסדרון למאייר(. המאחר ביותר מ- 53 דקות לא יורשה לבצע את הניסוי.

ניסוי בפייתון מכון טכנולוגי לישראל הניסוי מתקיים בבניין פישבך, חדר 573 )במסדרון למאייר(. המאחר ביותר מ- 53 דקות לא יורשה לבצע את הניסוי. הטכניון מכון טכנולוגי לישראל הפקולטה להנדסת חשמל, המעבדה למערכות תוכנה מרושתות גרסה 1.1: נובמבר 1111, איתי אייל, אלכס שרמן הניסוי מתקיים בבניין פישבך, חדר 573 )במסדרון למאייר(. המאחר ביותר מ- 53 דקות לא

More information

מותאמת לסביבת. Visual C# 2005 Express שונות. ולבצע rename לשם המבוקש

מותאמת לסביבת. Visual C# 2005 Express שונות. ולבצע rename לשם המבוקש מאגר מעבדות לשפות התכנות החדשות ניתן להשתמש בחומרים לצורך הוראה בלבד. לא ניתן לפרסם את החומרים או לעשות בהם כל שימוש מסחרי ללא קבלת אישור מראש מצוות הפיתוח בראשות ד"ר תמר פז. המעבדה בקובץ זה מיועדת לתלמידים

More information

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 102 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 5

FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO /2014 NYSCEF DOC. NO. 102 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 5 FILED: NEW YORK COUNTY CLERK 07/16/2014 INDEX NO. 652082/2014 NYSCEF DOC. NO. 102 RECEIVED NYSCEF: 07/16/2014 EXHIBIT 5 McLaughlin, Terence K. From: Sent: To: Cc: Subject: Follow Up Flag: Flag Status:

More information

שילוב אנימציה באתר תזוזת אלמנט לפי טיימר ולוח צירים

שילוב אנימציה באתר תזוזת אלמנט לפי טיימר ולוח צירים 1 שילוב אנימציה באתר תזוזת אלמנט לפי טיימר ולוח צירים - BouncingBall כדור מקפץ בתוך מסגרת - אנימציה פשוטה וחישובי התנגשות בקיר

More information

Name Page 1 of 6. דף ט: This week s bechina starts at the two dots in the middle of

Name Page 1 of 6. דף ט: This week s bechina starts at the two dots in the middle of Name Page 1 of 6 ***Place an X if Closed גמרא (if no indication, we ll assume Open חזרה (גמרא of the :דף times.בל 'נ marked, using the contact info above by Sunday, December 25, 2016 and we ll send it

More information

Computer Structure. Exercise #1 יש להגיש את התשובות הסופיות על גבי טופס זה.

Computer Structure. Exercise #1 יש להגיש את התשובות הסופיות על גבי טופס זה. שם: ת.ז: ציון: Computer Structure Exercise #1 יש להגיש את התשובות הסופיות על גבי טופס זה. שאלה 1 appleממש מערכת אשר קולטת בכל מחזור שעון ביט קלט בודדX. כדי להגדיר את הפלט של המערכת במחזור השעון הappleוכחי

More information

לאחר מכן נוכל לכתוב תוכניות שכוללות אלגוריתמים

לאחר מכן נוכל לכתוב תוכניות שכוללות אלגוריתמים 1 ברק גונן נלמד את הפקודות הבסיסיות של אסמבלי הגדרת משתנים ופקודת העתקה )מצגת 6( פקודות אריתמטיות, לוגיות, הזזה )מצגת 7( פקודות השוואה, קפיצה ולולאות )מצגת 8( בחלקים: לאחר מכן נוכל לכתוב תוכניות שכוללות

More information

THINKING ABOUT REST THE ORIGIN OF SHABBOS

THINKING ABOUT REST THE ORIGIN OF SHABBOS Exploring SHABBOS SHABBOS REST AND RETURN Shabbos has a multitude of components which provide meaning and purpose to our lives. We will try to figure out the goal of Shabbos, how to connect to it, and

More information

מספר השאלון: Thinking Skills נספח: כישורי חשיבה )לפרק ראשון ושני( א נ ג ל י ת (MODULE F) ספרות )מילון הראפס אנגלי-אנגלי-ערבי(

מספר השאלון: Thinking Skills נספח: כישורי חשיבה )לפרק ראשון ושני( א נ ג ל י ת (MODULE F) ספרות )מילון הראפס אנגלי-אנגלי-ערבי( בגרות לבתי ספר על יסודיים סוג הבחינה: מדינת ישראל קיץ תשע"א, 2011 מועד הבחינה: משרד החינוך 016117 מספר השאלון: Thinking Skills נספח: כישורי חשיבה )לפרק ראשון ושני( א נ ג ל י ת א. משך הבחינה: שעה וחצי שאלון

More information

תרגול 01: ממשקים והורשה

תרגול 01: ממשקים והורשה היום בתרגול ממשקים כללים בסיסיים o מימוש מספר ממשקים o דוגמת ממשק כחוזה o הורשה כללים בסיסיים o דריסה o instanceof אופרטור o תרגול 01: ממשקים והורשה interfaces ממשקים - כללי: הממשק אינו מחלקה, הוא מייצג

More information

נספח: כישורי חשיבה )לפרק ראשון ושני( אנגלית (MODULE F) ספרות או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי

נספח: כישורי חשיבה )לפרק ראשון ושני( אנגלית (MODULE F) ספרות או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי בגרות לבתי ספר על יסודיים א. סוג הבחינה: מדינת ישראל בגרות לנבחני משנה ב. משרד החינוך בגרות לנבחנים אקסטרניים ג. קיץ תשע"ד, מועד ב, 2014 מועד הבחינה: מספר השאלון: 416 016117, Thinking Skills נספח: כישורי

More information

שאלון ד' הוראות לנבחן

שאלון ד' הוראות לנבחן סוג הבחינה: א. בגרות לבתי ספר על- יסודיים ב. בגרות לנבחני משנה ג. בגרות לנבחנים אקסטרניים מועד הבחינה: תשס"ה, מועד ב מספר השאלון: 404 016105, י ת ל ג נ א שאלון ד' )MODULE D( הוראות לנבחן א. משך הבחינה:

More information

Visual C# Express יסודות מדעי המחשב 1 מהדורת עיצוב תשס"ו 2006 כתבה: יעל בילצ'יק (סופרין)

Visual C# Express יסודות מדעי המחשב 1 מהדורת עיצוב תשסו 2006 כתבה: יעל בילצ'יק (סופרין) יסודות 1 מדריך מעבדה לסביבת העבודה Visual C# Express כתבה: יעל בילצ'יק (סופרין) מהדורת עיצוב תשס"ו 2006 אוניברסיטת תל-אביב החוג להוראת המדעים מטה מל"מ המרכז הישראלי להוראת המדעים ע"ש עמוס דה-שליט משרד

More information

א נ ג ל י ת בהצלחה! ב. משרד החינוך בגרות לנבחנים אקסטרניים )מילון הראפס אנגלי-אנגלי-ערבי( השימוש במילון אחר טעון אישור הפיקוח על הוראת האנגלית.

א נ ג ל י ת בהצלחה! ב. משרד החינוך בגרות לנבחנים אקסטרניים )מילון הראפס אנגלי-אנגלי-ערבי( השימוש במילון אחר טעון אישור הפיקוח על הוראת האנגלית. בגרות לבתי ספר על יסודיים א. סוג הבחינה: מדינת ישראל בגרות לנבחני משנה ב. משרד החינוך בגרות לנבחנים אקסטרניים ג. א. משך הבחינה: שעה ורבע מועד הבחינה: חורף תשס"ז, 2007 מספר השאלון: 406 016107, א נ ג ל י

More information

זה אומר שאחרי הכרות עם השפה מה שדורש השקעה אפשר להקדיש את מרבית הזמן לצד המוזיקלי יצירתי ולא התכנותיÆ איזה כיף

זה אומר שאחרי הכרות עם השפה מה שדורש השקעה אפשר להקדיש את מרבית הזמן לצד המוזיקלי יצירתי ולא התכנותיÆ איזה כיף מדריך FAUST שפת תכנות ליישומי אודיו מחולל גל ריבועי פרויקט מס ± FAUST שפת תכנות המיועדת ליישומי עיבוד אות דיגיטלי במחשב בזמן אמת ומאפשרת להמיר אותם אח כ לפלאגינים בפורמט ÆVst ייחודה של השפה בכך שהיא מאפשרת

More information

שאלון ו' הוראות לנבחן

שאלון ו' הוראות לנבחן סוג הבחינה: א. בגרות לבתי ספר על- יסודיים ב. בגרות לנבחני משנה ג. בגרות לנבחנים אקסטרניים מועד הבחינה: תשס"ו, מועד ב מספר השאלון: 406 016107, י ת ל ג נ א שאלון ו' )MODULE F( הוראות לנבחן א. משך הבחינה:

More information

The Connection between Town Planning, Public Taking (Appropriation) and Land Appraisal

The Connection between Town Planning, Public Taking (Appropriation) and Land Appraisal The Connection between Town Planning, Public Taking (Appropriation) and Land Appraisal Adv. Shahar HARARI, Israel Key words: Town Planning, Appropriation, Appraisal SUMMARY It seems illogical that the

More information

SPSS 10.0 FOR WINDOWS

SPSS 10.0 FOR WINDOWS האוניברסיטה העברית בירושלים הפקולטה למדעי החברה המח' למדע המדינה והמח' לסוציולוגיה ואנתרופולוגיה SPSS 10.0 FOR WINDOWS חוברת הדרכה בסיסית מירי בנטואיץ' הוכן לשיעור במתודולוגיה של ד"ר מיכאל שלו ירושלים,

More information

Summing up. Big Question: What next for me on my Israel Journey?

Summing up. Big Question: What next for me on my Israel Journey? Summing up Goals: To facilitate feedback and debrief of the learning period To clarify and fix the Four Hatikvah Questions as the ongoing framework for approaching Israel To begin to concentrate participants

More information

מבוא לאסמבלי מאת אופיר בק חלקים נרחבים ממאמר זה נכתבו בהשראת הספר "ארגון המחשב ושפת סף" אשר נכתב ע"י ברק גונן לתוכנית גבהים של משרד החינוך.

מבוא לאסמבלי מאת אופיר בק חלקים נרחבים ממאמר זה נכתבו בהשראת הספר ארגון המחשב ושפת סף אשר נכתב עי ברק גונן לתוכנית גבהים של משרד החינוך. מאת אופיר בק חלקים נרחבים ממאמר זה נכתבו בהשראת הספר "ארגון המחשב ושפת סף" אשר נכתב ע"י ברק גונן לתוכנית גבהים של משרד החינוך. הקדמה בסדרת המאמרים הקרובה, אנחנו הולכים ללמוד על השפה אסמבלי, על השימוש בה

More information

פרק עצמים א. טיפוסים חדשים ב. מצב של עצם

פרק עצמים א. טיפוסים חדשים ב. מצב של עצם - 9-2 פרק עצמים במחלקות שימוש עד היום הכרתם טיפוסי ערכים פשוטים המוגדרים בשפה כמו int ו- double, יצרתם משתנים היכולים להכיל ערכים מטיפוסים אלה והשתמשתם בהם לפתרון בעיות. על ערכים פשוטים אלה אפשר היה לבצע

More information

Expressions (ex 8) Wild World (ex 7) Cars (ex 9)

Expressions (ex 8) Wild World (ex 7) Cars (ex 9) תר גול שי עור י ב ית 12 חזרה ע ל שא לו ת חשו בו ת מ שי ע ורי הבי ת ת וכנה 1 ס מ ס טר א' תשס"ז 1 סט ודנט י ם יקרים, אנא הקדישו מעט מזמנכם היקר ומלאו את סקר ההוראה. הסקר חשוב מאד כפידבק למרצים ולמתרגלים,

More information

מדריך לניהול VPS טריפל סי מחשוב ענן בע"מ.

מדריך לניהול VPS טריפל סי מחשוב ענן בעמ. מדריך לניהול VPS עמוד מספר 1 ניהול VPS Parallels Virtuozzo מכונות וירטואליות מבוססות טכנולוגיית VPS (Virtual Private Server).Containers למעט מספר מגבלות טכניות, ניתן לבצע במכונות אלו כל אשר ניתן לבצע בשרתים

More information

מטוסים נופלים, כורים מתפוצצים זיכרון אוטומטי מקטסטרופות לומדים בניינים קורסים,

מטוסים נופלים, כורים מתפוצצים זיכרון אוטומטי מקטסטרופות לומדים בניינים קורסים, 2 חלק עצמים ומחלקות בהנדסה קורות לעיתים קטסטרופות: מטוסים נופלים, כורים מתפוצצים בניינים קורסים, מקטסטרופות לומדים בעולם המחשבים, רוב הקטסטרופות התבטאו בכישלון לפתח תוכנה גדולה או בכישלון להשמיש תוכנה

More information

אנגלית ספרות בהצלחה! /המשך מעבר לדף/ נספח: כישורי חשיבה )לפרק ראשון ושני( או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי

אנגלית ספרות בהצלחה! /המשך מעבר לדף/ נספח: כישורי חשיבה )לפרק ראשון ושני( או: מילון אנגלי-ערבי / ערבי-אנגלי או: מילון אנגלי-אנגלי-ערבי בגרות לבתי ספר על יסודיים א. סוג הבחינה: מדינת ישראל בגרות לנבחני משנה ב. משרד החינוך בגרות לנבחנים אקסטרניים ג. קיץ תשע"ד, מועד ב, 2014 מועד הבחינה: מספר השאלון: 414 016115, Thinking Skills נספח: כישורי

More information

סמסטר אביב 2015, מועד ב' סמסטר קיץ 2015, מועד א' מתרגלים: אביב - נורית מושקוביץ', הלאל עאסי, אלירן וייס; קיץ מאיה דיאמנט

סמסטר אביב 2015, מועד ב' סמסטר קיץ 2015, מועד א' מתרגלים: אביב - נורית מושקוביץ', הלאל עאסי, אלירן וייס; קיץ מאיה דיאמנט יום חמישי, 17 לספטמבר 2015 מבחן סוף סמסטר - תכנות מונחה עצמים )236703( סמסטר סמסטר מרצים: אביב - ערן גלעד; קיץ - פרופ' יוסי גיל מתרגלים: אביב - נורית מושקוביץ', הלאל עאסי, אלירן וייס; קיץ מאיה דיאמנט הנחיות:

More information

Mage lvl 90 - The Magento RCE

Mage lvl 90 - The Magento RCE מאת נתנאל רובין הקדמה אני לא בטוח מי חשב שזה רעיון טוב לערבב את PHP עם כרטיסי אשראי, אבל אין ספק שהוא עשה לכלל חוקרי האבטחה שירות גדול. כידוע PHP היא אחת השפות הכי לא קונסיסטנטיות שיש. אם שפות תכנות נותנות

More information

מבוא לרשתות - תרגול מס' 11 Transparent Bridges

מבוא לרשתות - תרגול מס' 11 Transparent Bridges מבוא לרשתות - תרגול מס' 11 Transparent Bridges גשרים: מוטיבציה המטרה: חיבור של כמה רשתות מקומיות ) LAN -ים( לרשת מורחבת אחת על מנת לאפשר תקשורת בין מחשבים שאינם מחוברים לאותה רשת מקומית.?)ports עם מס'

More information

בהצלחה! (MODULE C) Hoffman, Y. (2014). The Universal English-Hebrew, Hebrew-English Dictionary

בהצלחה! (MODULE C) Hoffman, Y. (2014). The Universal English-Hebrew, Hebrew-English Dictionary בגרות סוג הבחינה: מדינת ישראל קיץ תשע"ז, 2017, מועד ב מועד הבחינה: משרד החינוך 403 016104, מספר השאלון: אנגלית שאלון ג' (MODULE C) ג רסה א' הוראות לנבחן א. משך הבחינה: שעה וחצי ב. מבנה השאלון ומפתח ההערכה:

More information

תרגול 11 תור עץ חיפוש בינארי

תרגול 11 תור עץ חיפוש בינארי 2018 מבוא למדעי המחשב תרגול 11 תור עץ חיפוש בינארי ראינו בהרצאות מבני נתונים נוספים עצים בינאריים עצי חיפוש בינאריים תור מחסנית נראה בתרגול מבני נתונים חדשים תור ממשק + מימוש + שאלה עץ חיפוש בינארי תזכורת

More information

במבוא מורחב למדעי המחשב בשפת פייתון

במבוא מורחב למדעי המחשב בשפת פייתון עמוד 1 מתוך 11 בחינה במבוא מורחב למדעי המחשב בשפת פייתון 8630.0081.80 סמסטר ב', מועד ב',תשע"ב 12/08/2012 אוהד ברזילי, אמיר רובינשטיין הוראות )נא לקרוא!( משך הבחינה שלוש שעות, חלקו את זמנכם ביעילות. בבחינה

More information

תוכן העניינים: פרק סדרות סיכום תכונות הסדרה החשבונית:... 2 תשובות סופיות:...8 סיכום תכונות הסדרה ההנדסית:...10

תוכן העניינים: פרק סדרות סיכום תכונות הסדרה החשבונית:... 2 תשובות סופיות:...8 סיכום תכונות הסדרה ההנדסית:...10 תוכן העניינים: פרק סדרות סיכום תכונות הסדרה החשבונית: שאלות לפי נושאים: 3 שאלות העוסקות בנוסחת האיבר הכללי: 3 שאלות העוסקות בסכום סדרה חשבונית: 4 שאלות מסכמות: 5 תשובות סופיות: 8 סיכום תכונות הסדרה ההנדסית:

More information

A Long Line for a Shorter Wait at the Supermarket

A Long Line for a Shorter Wait at the Supermarket A Long Line for a Shorter Wait at the Supermarket - New York Times Page 1 of 4 A Long Line for a Shorter Wait at the Supermarket Sam Baris directing customers at Whole Foods in Columbus Circle, where the

More information

NTFS ADS Magic Tricks

NTFS ADS Magic Tricks מאת: אפיק קסטיאל )cp77fk4r( הקדמה את המאמר הזה החלטתי לכתוב לאחר פגישה מקרית עם התולעת הישנה,"W2K.Stream" שפגעה במערכות.Windows 2000 בזמנו לא שמעתי עליה, אבל לאחרונה, לאחר שיחה מעניינת עם בחור מעניין יצא

More information

תוכנה 1 אביב תשע"ג תרגיל מספר 7 לכל אורך התרגיל ניתן להוסיף שירותי עזר בתנאי שאינם פוגעים בנדרש בסעיפים אחרים.

תוכנה 1 אביב תשעג תרגיל מספר 7 לכל אורך התרגיל ניתן להוסיף שירותי עזר בתנאי שאינם פוגעים בנדרש בסעיפים אחרים. תוכנה 1 אביב תשע"ג תרגיל מספר 7 הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(http://moodle.tau.ac.il/) בלבד הגשת התרגיל תיעשה במערכת ה- moodle יש להגיש קובץ zip יחיד הנושא

More information

byte code :(compiler) .class מהדר בתהליך עורך, סייר, קומפיילר,,JRE וכו'. למשל: אקליפס. נקודות חשובות: חסכון בהקצאת זיכרון.

byte code :(compiler) .class מהדר בתהליך עורך, סייר, קומפיילר,,JRE וכו'. למשל: אקליפס. נקודות חשובות: חסכון בהקצאת זיכרון. 1 שיעור 1: שלום עולם, תרגול 2: 1, מחרוזות ומערכים: מפרש :(interpreter) מריץ את הקוד שנכתב בשפת.Java חסרונות: מהדר מאט את מהירות הריצה. גילוי שגיאות רק בזמן ריצה. :(cmpiler) מעבד את קוד התוכנית לפורמט נוח

More information

Apple, keys, pen, pencils, pencilbox,(toy)elephant,( toy) boy, (toy) girl, ball

Apple, keys, pen, pencils, pencilbox,(toy)elephant,( toy) boy, (toy) girl, ball PRONOUNS: טריגר/ משחק פתיחה- המורה תביא לכיתה חפצים שונים ותראה אותם לכמה שניות לתלמידים ותכסה את החפצים. המורה תבקש מהתלמידים לשחזר את החפצים על פי זיכרון ותרשום את שמם על הלוח )מה שלא זכרו אח"כ המורה

More information

שאלון ו' הוראות לנבחן

שאלון ו' הוראות לנבחן סוג הבחינה: א. בגרות לבתי ספר על- יסודיים ב. בגרות לנבחני משנה ג. בגרות לנבחנים אקסטרניים מועד הבחינה: תשס"ה, מועד ב מספר השאלון: 406 016107, י ת ל ג נ א שאלון ו' )MODULE F( הוראות לנבחן א. משך הבחינה:

More information

Genetic Tests for Partners of CF patients

Genetic Tests for Partners of CF patients Disclaimer: this presentation is not a genetic/medical counseling The Annual Israeli CF Society Meeting Oct 2013 Genetic Tests for Partners of CF patients Ori Inbar, PhD A father to a 8 year old boy with

More information